Kotlin Meta
258 subscribers
59 photos
2 videos
1 file
59 links
Всякое разное интересное про язык программирования Kotlin и около него.

Чатик: @kotlinmetachat.
Мы на YouTube: https://youtube.com/@KotlinMeta.
Мы на Twitch: https://twitch.tv/kotlinmeta.
Download Telegram
java.io.File Deprecated

Многие из вас скорее всего используют этот класс и даже не подозревают о том, что в нём есть множество проблем. Кстати, а кто сказал-то, что он Deprecated? У меня в IDE всё норм, не видно проблем! Ну вот в этом то и дело, что найти информацию об этом возможно только если очень постараться и знать, где искать.

Переходы: 123
👍711
Что же говорит Oracle в своей заметке о том, что java.io.File – это легаси:

- Многие методы java.io.File не кидают ошибки, когда операция провалилась, что делает невозможным получить понятное сообщение об ошибке. Например, невозможно отличить File.delete() вернул false из-за того, что файла не было, или из-за того, что у пользователя недостаточно прав.

- File.rename работает по-разному на разных плафтормах.

- Нет нормальной поддержки для симлинков.

- Проблемы с метадатой: нельзя подробно посмотреть права файла, кто владелец файла и прочие атрибуты безопасности. Та метадата, что всё-таки поддерживалась, работает крайне не эффективно и медленно.

- Методы java.io.File не масштабируются. Большие папки приводят к тому, что методы java.io.File просто зависают, что может приводить к потенциальным Denial of Service атакам.

- С помощью этого класса не написать надёжный код, который рекурсивно пройдёт по дереву файлов и обработает циклические симлинки.

Переходы: 123
5🔥75👍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

Переходы: 123
51👍5🔥1