Чи є в нових додатках, написаних на 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конструктор.
чи можемо ми вважати це застарілим?
Ні, ви не можете вважати його застарілим, доки він не буде позначений на FileJavadoc.
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.FileOracle дає підказки щодо використання 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ЛОЛ.