Чи є в нових додатках, написаних на Java 7, причина більше використовувати java.io.File
об'єкт чи ми можемо вважати його застарілим?
Я вірю, що java.nio.file.Path
може зробити все, що java.io.File
може, і більше.
Чи є в нових додатках, написаних на Java 7, причина більше використовувати java.io.File
об'єкт чи ми можемо вважати його застарілим?
Я вірю, що java.nio.file.Path
може зробити все, що java.io.File
може, і більше.
Відповіді:
Довга коротка історія:
java.io.File
найімовірніше, ніколи не буде застарілим / непідтримуваним. Сказане, java.nio.file.Path
є частиною більш сучасних java.nio.file
ліб, і робить все, що java.io.File
можна, але в цілому кращим чином та іншим.
Для нових проектів використовуйте Path
.
І якщо вам коли-небудь потрібний File
об’єкт для спадщини, просто зателефонуйте до Path # toFile ()
Перехід з файлу на шлях
File
замість Path
?
Path
може бути легше модифіковано, щоб "додати дітей" за допомогою " resolve(...)
або" перейти на один рівень " getParent()
тощо, тоді як File
не може. По суті, після того як ви закінчите модифікувати Шлях, ви часто конвертуєте його, toFile()
щоб він міг бути відправлений у застарілі методи, такі як FileInputStream
конструктор.
чи можемо ми вважати це застарілим?
Ні, ви не можете вважати його застарілим, доки він не буде позначений на File
Javadoc.
java.io.File
досі не видаляється, ані навіть застаріла, і в Javadoc все ще немає нічого, що б припустило, що будь-яка з цих речей ніколи не відбудеться.
Перегляньте цю статтю про додаткову інформацію - http://www.oracle.com/technetwork/articles/javase/nio-139333.html
Фактично file.Path - це шлях, який потрібно пройти відтепер, але, як відомо, люди Java прагнуть зберігати сумісність, тому я думаю, саме тому вони покинули його.
Я завершу дуже гарну відповідь @mmcrae
.
чи є якісь причини більше використовувати об’єкт java.io.File або ми можемо вважати його застарілим?
Класи JDK дуже рідко застаріли.
Ви можете побачити в списку застарілих API JDK 8 усі класи, які вивели з часу першого JDK.
Він містить лише невелику частину класів, які документація Oracle та спільнота Java перешкоджають використовувати.
java.util.Date
, java.util.Vector
, java.util.Hashtable
... , що класи з такою кількістю дефектів не рекомендується.
Але чому ?
Тому що концептуально щось із deprecated
засобів все ще існує, але відштовхувати від використання, оскільки це, безумовно, буде знято.
Тисячі програм покладаються на ці погано розроблені класи.
Для таких класів розробники Java API не подаватимуть такий сигнал.
Відповідь @EJP
справді правильна:
Якщо тільки і так не буде позначено в Javadoc.
Отже, я думаю, що ваше питання мало б більше сенсу в його термінах:
"Оскільки у нас є вибір, чи слід використовувати java.io.File
чи java.nio.file.Path
для нових розробок, і якщо відповідь є java.nio.file.Path
, чи можете ви легко скористатися java.io.File
для застарілих проектів java.io.File
?"
Я вважаю, що java.nio.file.Path може зробити все, що може зробити java.io.File та багато іншого.
Ви маєте відповідь.
Цей підручник з оракула про спадщину IO підтверджує ваше мислення.
До випуску Java SE 7
java.io.File
клас був механізмом, використовуваним для вводу / виводу файлів, але він мав кілька недоліків.Багато методів не кидали винятку, коли вони не вдавалися, тому неможливо було отримати корисне повідомлення про помилку. Наприклад, якщо видалення файлу не вдалося, програма отримає "помилку видалення", але не знає, чи не тому, що файл не існував, у користувача не було дозволів або виникла якась інша проблема.
Метод перейменування не працював послідовно на всіх платформах. Не було реальної підтримки символічних посилань.
Бажано отримати більшу підтримку метаданих, таких як дозволи файлів, власник файлу та інші атрибути безпеки.
Доступ до метаданих файлів виявився неефективним.
Багато методів файлів не масштабували. Запит великого списку каталогів на сервері може призвести до зависання. Великі каталоги також можуть спричинити проблеми з ресурсами пам'яті, що призведе до відмови в обслуговуванні.
Не вдалося написати надійний код, який міг би рекурсивно переходити до файлового дерева та відповідати відповідним чином, якщо були кругові символічні посилання.
Маючи стільки недоліків java.io.File
, нам справді немає причин використовувати цей клас для нових розробок.
Навіть для використання застарілого коду java.io.File
Oracle дає підказки щодо використання Path
.
Можливо, у вас є застарілий код, який використовує java.io.File і хочете скористатися функцією java.nio.file.Path з мінімальним впливом на ваш код.
Клас java.io.File надає метод toPath, який перетворює екземпляр файлу старого стилю в екземпляр java.nio.file.Path, таким чином:
Path input = file.toPath();
Потім ви можете скористатися багатим набором функцій, доступним класу Path.
Наприклад, припустимо, у вас був код, який видалив файл:
file.delete();
Ви можете змінити цей код, використовуючи метод Files.delete таким чином:
Path fp = file.toPath();
Files.delete(fp);
Так, але багато існуючих API, включаючи власні стандартні API Java7, як і раніше працюють лише з File
типом.
Java.io.File не застаріло. Так, java.nio.file.Path краще, але поки існує ще багато програм і підручників, що використовують Java.io.File, якщо це не з застарілих причин, це не слід вважати застарілим, його надто важливим. Це буде просто кидати гайковий ключ у творах без жодної вигоди. Наприклад, Android-система використовує File для деяких основних функцій обробки файлів.
Path
краще. Він запитав, чи File
знецінений.
Чи є в нових додатках, написаних на Java 7, будь-яка причина використовувати об’єкт java.io.File або ми можемо вважати його застарілим?
Це трохи схоже на те, що сказати: "чи повинен Наполеон вторгнутись у Росію, чи справді смачні брюссельські капуста?"
Щодо другої частини питання, то ви справді можете вважати її застарілою. Станом на січень 2018 року його не застаріло. Але ніщо не заважає вам так вважати . Чи забезпечить це вам будь-яку перевагу в цьому житті чи в наступному, сказати неможливо.
File
. Я повинен, так чи ні?"
File
. Це не скоро помре.
it isn't deprecated. But there's nothing to stop you *considering* it so
ЛОЛ.