1. Клас Path
Якщо ви хочете написати програму, що працює з файлами на диску, ви можете легко це зробити. У Java є дуже багато класів, які допомагають працювати з файлами та їхнім вмістом.
У ранніх версіях Java для роботи з файлами використовувалися такі класи, як File і FileInputStream. Але тепер клас File вважається застарілим, і використовувати його не рекомендується. Щоправда, його й досі можна побачити в коді, параметрах методів або конструкторах класів.
Ми розпочнемо вивчення роботи з файлами відразу з класу Path. Path — це клас, який прийшов на зміну File. Його використання безпечніше й ефективніше.
Клас Path
Клас Path — це, власне, не клас, а інтерфейс. Так було зроблено для того, щоб для кожної операційної чи файлової системи можна було створити свій клас-спадкоємець Path.
Windows моє свій стандартний формат шляху файлів, Linux — свій. До того ж у світі є ще багато операційних систем, і кожна має свої стандарти.
Тому в усіх методах для роботи з файлами вказано інтерфейс Path, але в дійсності використовуються його класи-спадкоємці: WindowsPath, UnixPath, ...
Створення об'єкта Path
Для створення об'єкта Path (насправді це буде об'єкт класу-спадкоємця WindowsPath), використовується така команда:
Path ім'я = Path.of(шлях);
де ім'я — це ім'я змінної типу Path, шлях — це шлях до файлу (або директорії) разом з ім'ям файлу (або директорії), а of — це статичний метод класу Path.
Метод of() використовується для створення об'єктів типу WindowsPath, якщо програма призначена для ОС Windows, або об'єктів UnixPath, якщо програма призначена для ОС Linux. Ви не можете створити об'єкт типу Path за допомогою коду new Path().
Приклади:
| Код | Примітка |
|---|---|
|
Шлях до файлу |
|
Шлях до директорії |
Для існування валідного об'єкта типу Path необов'язково має існувати файл (або директорія). Можливо, ви тільки збираєтеся створити цей файл… Об'єкт типу Path — це немов розширена версія типу String: він не прив'язаний до певного файлу на диску, а просто зберігає якийсь шлях.
2. Методи типу Path
Інтерфейс Path має чимало цікавих методів. Найцікавіші з них наведено в цій таблиці.
| Метод | Опис |
|---|---|
|
Повертає батьківську директорію |
|
Повертає ім'я файлу без директорії |
|
Повертає кореневу директорію зі шляху |
|
Перевіряє, чи є поточний шлях абсолютним |
|
Перетворює шлях на абсолютний |
|
Видаляє шаблони в імені директорії |
|
Формує новий абсолютний шлях з абсолютного та відносного шляхів |
|
Отримує відносний шлях із двох абсолютних шляхів |
|
Перевіряє, чи поточний шлях починається зі вказаного шляху |
|
Перевіряє, чи поточний шлях закінчується вказаним шляхом |
|
Поділяє шлях на частини роздільником /і повертає кількість частин |
|
Поділяє шлях на частини роздільником /і повертає частину шляху за її номером |
|
Поділяє шлях на частини роздільником /і повертає частину шляху, задану інтервалом |
|
Перетворює об'єкт Path на застарілий об'єкт File |
|
Перетворює об'єкт Path на об'єкт типу URI |
Далі наведено короткий опис методів.
3. Поділ шляху на частини
Метод getParent() повертає шлях, який указує батьківську директорію поточного шляху незалежно від того, чи є цей шлях директорією чи файлом:
| Код | Значення |
|---|---|
|
|
|
|
|
|
Метод getFileName() повертає частину шляху після останнього роздільника, тобто тільки ім'я файлу (або директорії):
| Код | Значення |
|---|---|
|
|
|
|
|
|
Метод getRoot() повертає шлях до кореневої директорії:
| Код | Значення |
|---|---|
|
|
4. Абсолютний і відносний шляхи
Є два типи шляхів: абсолютні й відносні. Абсолютний шлях починається з кореневої директорії. Для Windows це може бути папка c:\, для Linux — директорія /
Відносний шлях вказується відносно певної директорії. Тобто це кінцева частина шляху без початкової. Відносний шлях можна перетворити на абсолютний і навпаки.
Метод boolean isAbsolute()
Метод перевіряє, чи є поточний шлях абсолютним:
| Код | Значення |
|---|---|
|
|
|
|
Метод Path toAbsolutePath()
Перетворює шлях на абсолютний і за потреби додає до нього поточну робочу директорію:
| Код | Значення |
|---|---|
|
|
|
|
Метод Path normalize()
У шляху замість імені директорії можна писати «..», що означає повернення на одну директорію назад. Нормалізація це усуває. Приклади:
| Код | Значення |
|---|---|
|
|
|
|
Метод Path relativize(Path other)
Метод relativize() дозволяє обчислити «різницю шляхів», тобто показати, чим один шлях відрізняється від іншого.
| Код | Значення |
|---|---|
|
|
|
|
|
Помилка IllegalArgumentException: два шляхи мають різний «корінь» (різні диски) |
Метод Path resolve(Path other)
Метод resolve() виконує операцію, зворотну relativize(): він формує новий абсолютний шлях з абсолютного і відносного шляхів.
| Код | Значення |
|---|---|
|
|
|
|
Метод toFile()
Метод повертає застарілий об'єкт File, який зберігає той самий шлях до файлу, що й об'єкт Path.
Метод toURI()
Метод перетворює шлях відповідно до стандарту URI і повертає об'єкт, який містить шлях до файлу:
| Шлях до файлу | URI до файлу |
|---|---|
|
|
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ