Quelle est la manière simple et canonique de lire un fichier entier en mémoire en Scala ? (Idéalement, avec un contrôle sur l'encodage des caractères).
Le mieux que je puisse faire est :
scala.io.Source.fromPath("file.txt").getLines.reduceLeft(_+_)
ou suis-je censé utiliser une des Les idiomes horribles de Java dont le meilleur (sans utiliser de bibliothèque externe) semble être :
import java.util.Scanner
import java.io.File
new Scanner(new File("file.txt")).useDelimiter("\\Z").next()
À la lecture des discussions sur les listes de diffusion, je ne suis pas sûr que scala.io.Source soit censée être la bibliothèque d'E/S canonique. Je ne comprends pas exactement quel est son objectif.
... Je voudrais quelque chose de très simple et facile à retenir. Par exemple, dans ces langues, il est très difficile d'oublier l'idiome ...
Ruby open("file.txt").read
Ruby File.read("file.txt")
Python open("file.txt").read()
12 votes
Java n'est pas si mal si vous connaissez les bons outils. import org.apache.commons.io.FileUtils ; FileUtils.readFileToString(new File("file.txt", "UTF-8")
25 votes
Ce commentaire ne tient pas compte de la conception du langage. Tout langage qui dispose d'une fonction de bibliothèque simple pour exactement l'opération que vous voulez effectuer est donc aussi bon que sa syntaxe d'invocation de fonction. Si l'on disposait d'une bibliothèque infinie et 100% mémorisée, tous les programmes seraient implémentés avec un seul appel de fonction. Un langage de programmation est bon lorsqu'il nécessite l'existence d'un nombre réduit de composants préfabriqués afin d'obtenir un résultat spécifique.
0 votes
Je crains que "étant donné une bibliothèque infinie et 100% mémorisée" ne soit pas une prémisse pour un argument rationnel ! Les langages de programmation sont pour les humains, et idéalement devraient contenir juste les abstractions nécessaires pour coller les choses ensemble.
0 votes
La meilleure solution moderne est d'utiliser la méthode de Li os-lib comme il l'a mentionné ici . os-lib cache la laideur de Java et fournit L'élégance du rubis .