java.io.File Deprecated
Многие из вас скорее всего используют этот класс и даже не подозревают о том, что в нём есть множество проблем. Кстати, а кто сказал-то, что он Deprecated? У меня в IDE всё норм, не видно проблем! Ну вот в этом то и дело, что найти информацию об этом возможно только если очень постараться и знать, где искать.
Переходы: 1 • 2 • 3
Многие из вас скорее всего используют этот класс и даже не подозревают о том, что в нём есть множество проблем. Кстати, а кто сказал-то, что он Deprecated? У меня в IDE всё норм, не видно проблем! Ну вот в этом то и дело, что найти информацию об этом возможно только если очень постараться и знать, где искать.
Переходы: 1 • 2 • 3
👍7❤1 1
Что же говорит Oracle в своей заметке о том, что java.io.File – это легаси:
- Многие методы java.io.File не кидают ошибки, когда операция провалилась, что делает невозможным получить понятное сообщение об ошибке. Например, невозможно отличить File.delete() вернул false из-за того, что файла не было, или из-за того, что у пользователя недостаточно прав.
- File.rename работает по-разному на разных плафтормах.
- Нет нормальной поддержки для симлинков.
- Проблемы с метадатой: нельзя подробно посмотреть права файла, кто владелец файла и прочие атрибуты безопасности. Та метадата, что всё-таки поддерживалась, работает крайне не эффективно и медленно.
- Методы java.io.File не масштабируются. Большие папки приводят к тому, что методы java.io.File просто зависают, что может приводить к потенциальным Denial of Service атакам.
- С помощью этого класса не написать надёжный код, который рекурсивно пройдёт по дереву файлов и обработает циклические симлинки.
Переходы: 1 • 2 • 3
- Многие методы java.io.File не кидают ошибки, когда операция провалилась, что делает невозможным получить понятное сообщение об ошибке. Например, невозможно отличить File.delete() вернул false из-за того, что файла не было, или из-за того, что у пользователя недостаточно прав.
- File.rename работает по-разному на разных плафтормах.
- Нет нормальной поддержки для симлинков.
- Проблемы с метадатой: нельзя подробно посмотреть права файла, кто владелец файла и прочие атрибуты безопасности. Та метадата, что всё-таки поддерживалась, работает крайне не эффективно и медленно.
- Методы java.io.File не масштабируются. Большие папки приводят к тому, что методы java.io.File просто зависают, что может приводить к потенциальным Denial of Service атакам.
- С помощью этого класса не написать надёжный код, который рекурсивно пройдёт по дереву файлов и обработает циклические симлинки.
Переходы: 1 • 2 • 3
5🔥7 5👍3😨2
Поэтому Oracle и рекомендует больше не использовать java.io.File. Вместо этого (ещё аж в Java 8) были добавлены новые классы, которые решают эти проблемы. Были, наконец, разделены "данные" и "действия". Теперь "данные" выражаются в виде неизменяемого (а значит и потокобезопасного) объекта java.nio.file.Path. А действия с файлами реализованы в классе java.nio.file.Files, который реализует логику из java.io.File, но правильно.
Будет ли вам плохо прямо сейчас, если вы продолжите использовать java.io.File? Нет. Как и любая архитектурная ошибка (которой является java.io.File), этот класс может долго лежать миной в вашем проекте и никому не мешать. Но стоит ли новые проекты начинать и продолжать со старта заражать код легаси? Для меня ответ, скорее, нет.
Oracle Legacy File I/O
Переходы: 1 • 2 • 3
Будет ли вам плохо прямо сейчас, если вы продолжите использовать java.io.File? Нет. Как и любая архитектурная ошибка (которой является java.io.File), этот класс может долго лежать миной в вашем проекте и никому не мешать. Но стоит ли новые проекты начинать и продолжать со старта заражать код легаси? Для меня ответ, скорее, нет.
Oracle Legacy File I/O
Переходы: 1 • 2 • 3
51👍5🔥1