java.io.File vs java.nio.Files, который является предпочтительным в новом коде?

При написании ответов вокруг SO пользователь попытался указать, что java.io.File не следует использовать в новом коде, вместо этого он утверждает, что вместо этого следует использовать новый объект java.nio.Files; он связан с этой статьей.

Теперь я развиваюсь на Java уже несколько лет и до сих пор не слышал этого аргумента; поскольку я читал его сообщение, которое я искал, и не нашел много других источников, которые подтверждают это, и лично я чувствую, что многие из аргументов, изложенных в статье, являются слабыми и что, если вы знаете, как их читать, ошибки, Класс файла обычно расскажет вам, в чем проблема.

Поскольку я постоянно разрабатываю новый код, мой вопрос таков:

Является ли это активным аргументом в сообществе Java? Является ли Файлы предпочтительнее Файл для нового кода? Каковы основные преимущества/недостатки между этими двумя?

Ответ 1

Связанная с вами документация дает ответ:

Пакет java.nio.file определяет интерфейсы и классы для виртуальной машины Java для доступа к файлам, атрибутам файлов и файловым системам. Этот API может использоваться для преодоления многих ограничений класса java.io.File. Метод toPath может использоваться для получения Пути, который использует абстрактный путь, представленный объектом File, чтобы найти файл. Результирующий Путь может использоваться с классом Files для обеспечения более эффективного и расширенного доступа к дополнительным файлам, атрибутам файлов и исключениям ввода-вывода для диагностики ошибок при сбое операции в файле.

Ответ 2

File имеет более новую реализацию: Path. С конструктором Paths.get("..."). И у Files много полезных функций утилиты с лучшими реализациями (move вместо иногда неудачного File.renameTo).

Path поддерживает свою файловую систему. Следовательно, вы можете скопировать из zip файловой системы ("jar: file:......zip") некоторый путь к другой файловой системе и наоборот.

File.toPath() может помочь инкрементному переходу.

Только утилиты в Files делают переход на новые классы прибыльными.

Ответ 3

Я бы сказал, что ни один из них не является "предпочтительным". Вместо этого я бы рекомендовал вам изучить функциональность вашего приложения и использовать, какой из java.io.File или java.nio.Files лучше соответствует требованиям.

Ответ, вероятно, будет либо ничьей, либо java.nio.Files лучше. Но решать вам или вашей команде решать, а не какой-то другой программист на SO.


Является ли это активным аргументом в сообществе Java?

Есть люди, которые будут спорить обо всем. Но я бы сказал, что сообщество (в целом) имеет более важные проблемы.