49 votes

Quelle est la bonne façon d'utiliser scala.io.Source ?

Dans de nombreux exemples, il est décrit que vous pouvez utiliser scala.io.Source pour lire un fichier entier comme celui-ci :

 val str = scala.io.Source.fromFile("test.txt").mkString()

Mais la fermeture du flux sous-jacent n'est pas mentionnée.

Pourquoi Scala ne fournit-il pas un moyen pratique de le faire, comme la clause with en Python ? Cela a l'air utile mais pas difficile.

Existe-t-il un autre meilleur moyen de le faire en toute sécurité dans Scala, je veux dire lire un fichier entier ?

37voto

matyjas Points 565

Par souci d'exhaustivité

 val testTxtSource = scala.io.Source.fromFile("test.txt")
val str = testTxtSource.mkString()
testTxtSource.close()

Devrait faire avancer les choses.

13voto

Je recommande d' utiliser le using , ce qui rend votre code plus propre et plus fiable

 using(Source.fromFile("test.txt")){ _.mkString()}

Scala 2.13 a ajouté Using à la bibliothèque. Ainsi, à condition que Using.apply renvoie un Try , sur Scala 2.13, cela devient :

 import scala.util.Using
import scala.io.Source

Using(Source.fromFile("test.txt"))(_.mkString)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X