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?
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.
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).
je recommande en utilisant , ce qui rend votre code plus net et plus fiable
using(Source.fromFile("test.txt")){ _.mkString()}