Почему в Java 7 нет файла Files.readAllLines(String path)?

Я пытаюсь выучить nio 2 пакет в Java 7, и я наткнулся на Files.readAllLines(Path p, Charset cs) метод. Я нахожу это очень полезным, но я считаю, что должна быть версия без cs параметр, как:

 public static List<String> readAllLines(String path)
    throws IOException
{ return readAllLines(Paths.get(path), Charset.defaultCharset());}

Я убедился, что большую часть времени метод будет вызываться с помощью Charset по умолчанию, так почему бы не использовать ярлык. Есть ли что-то, чего мне не хватает в кодировках, которые бы оправдывали отсутствие этого метода? Я очень удивлен, потому что у Scala есть эта опция:

Source.fromFile("fileName").getLines

так что я не понимаю, почему Java не должна. Есть мнения?

2 ответа

[...] в большинстве случаев метод будет вызываться с Charset по умолчанию,

На самом деле, нет. Большую часть времени он будет вызываться с кодировкой, в которой вы ожидаете, что файл будет закодирован. Обычно в эти дни это UTF-8:

Files.readAllLines("fileName", StandardCharsets.UTF_8)

Ваше приложение может быть выполнено на нескольких платформах и операционных системах, используя различную кодировку символов по умолчанию. Вы не хотите, чтобы ваше приложение сломалось только из-за этого.

Я думаю, что это хороший выбор, исправление неправильных решений из прошлого. Многие старые методы Java используют системную кодировку по умолчанию, вызывая несогласованное поведение или приложения, например, между Windows и Linux. Принудительный выбор кодировки символов просто делает ваше приложение более переносимым и безопасным.


Кстати, так как вы упоминаете io.Source класс - обратите внимание, что он возвращает итератор вместо List<String> как Files класс делает. Преимущество: файл загружается лениво, а не все сразу ArrayList<String>, Недостаток: вы должны закрыть исходный код вручную (чего вы не можете сделать в своем фрагменте кода).

Вы должны спросить дизайнеров, но очень вероятно, что они разделяют мое мнение о том, что чтение целых файлов в память не должно поощряться. Он не масштабируется и вносит ненужные затраты времени и пространства. Обработайте файл строкой за раз.

Другие вопросы по тегам