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 ceci:

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

Mais la fermeture du flux sous-jacent n'est pas mentionné. Pourquoi Scala ne fournit-il pas un moyen pratique de le faire, comme avec la clause en Python? Il semble utile, mais pas difficile.

y a-t-il un autre meilleur moyen de le faire en toute sécurité à Scala, je veux dire lire un dossier entier?

21
demandé sur Eastsun 2010-12-16 11:45:58

3 réponses

Par souci d'exhaustivité

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

Devrait faire avancer les choses.

22
répondu matyjas 2011-08-24 08:04:20

Scala io bibliothèque était juste hack fait de fournir un soutien pour des besoins limités. Un effort a été fait pour fournir à Scala une bibliothèque d'entrées-sorties bien pensée, qui est actuellement hébergée au assemblla , avec un GitHub dépôt ainsi.

si vous allez utiliser l'E/S pour autre chose que lire le fichier occasionnel sur les processus éphémères, vous feriez mieux d'utiliser les bibliothèques Java, ou regarder le support d'E/S actuellement disponible dans le compilateur (qui nécessitera scala-compiler.pot à être distribué avec l'application).

pour ce qui est de la gestion automatique des ressources, regardez cette question , ou cette bibliothèque (qui figure dans la réponse acceptée à cette question).

18
répondu Daniel C. Sobral 2017-05-23 10:31:37

je recommande en utilisant , ce qui rend votre code plus net et plus fiable

using(Source.fromFile("test.txt")){ _.mkString()}
4
répondu Valentin Tihomirov 2017-05-23 12:02:59