2010-12-16 22 views
20

Во многих примерах описан, что вы можете использовать scala.io.Source читать весь файл, как это:Каков правильный способ использования scala.io.Source?

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

Но закрытие основного потока не упоминается. Почему Scala не предоставляет удобный способ сделать это, например, с предложением в Python? Это выглядит полезно, но не сложно.

Есть ли другой лучший способ сделать это безопасно в Scala, я хочу прочитать целый файл?

+0

ли право использовать Source таким образом, не закрывая основной поток? – woods 2010-12-17 05:13:09

+4

Если вы прочитали код scala.io.Source, вы обнаружите, что на самом деле он оставляет работу по закрытию базового потока для вас. Удивительно! – woods 2010-12-22 07:57:02

ответ

18

Библиотека Scala's io была просто взломана, чтобы обеспечить поддержку для ограниченных потребностей. Было предпринято попытку предоставить хорошо продуманную библиотеку io для Scala, которая в настоящее время размещается по адресу assembla, а также в репозитории github.

Если вы собираетесь использовать ввод-вывод для чего-либо большего, чем чтение случайного файла на короткоживущих процессах, лучше использовать библиотеки Java или посмотреть поддержку I/O, доступную в настоящее время в компиляторе (для чего потребуется приложение scala-compiler.jar для распространения с приложением).

Что касается автоматического управления ресурсами, посмотрите на this question или на this library (который указан в принятом ответе на этот вопрос).

+1

Вы по-прежнему не рекомендуем использовать scala.io с 2016 года? – knub 2016-03-11 13:08:45

20

Для полноты

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

Если все это осуществить.

2

Я рекомендую using the using, что делает ваш код аккуратным и более надежным

using(Source.fromFile("test.txt")){ _.mkString()} 
Смежные вопросы