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 до файлу |
---|---|
|
|
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ