— О, Ріша, чудово!
— Привіт, Аміго! Як життя?
— Чудово. Щойно Білаабо розповідав купу цікавого про File і як з ним працювати.
— Думаю, я маю що додати на цю тему.
— Так? Тоді із задоволенням послухаю.
— Тоді слухай. Java постійно розвивається, постійно шукаються нові способи робити різні речі ефективніше. Ще Java 7 була додана альтернатива класу File.
— Альтернатива?
— Ага. Взяли за основу класFile, додали в нього трохи нового, перейменовували методи, а в кінці ще й розділили на два. Так що тепер є два нові класи - Path і Files< /strong>. Path – це фактично новий аналог класу File, а Files – це утилітний клас (за аналогією з класами Arrays & ; Collections), в нього можна винести всі статичні методи класу File. Так "правильніше" з погляду ООП.
— Ну, якщо з погляду ОВП, то – бл. А що змінилося?
— По-перше, відмовилися від дублювання методів, які повертали String і File. У класі Path всі методи повертають Path.
По-друге, прибрали багато статичних утилітних методів у клас Files.
По-третє, зручніше стало працювати з відносними шляхами.
Ось список методів:
Методи класу Path | Опис |
---|---|
boolean isAbsolute() |
Повертає true, якщо шлях є абсолютним. |
Path getRoot() |
Повертає корінь поточного шляху – директорію найвищого рівня. |
Path getFileName() |
Повертає ім'я файлу з поточного шляху. |
Path getParent() |
Повертає директорію з поточного шляху. |
boolean startsWith(Path other) |
Перевіряє, що поточний шлях починається з переданого шляху. |
boolean endsWith(Path other) |
Перевіряє, що поточний шлях закінчується на переданий шлях. |
Path normalize() |
Нормалізує поточний шлях. Наприклад, наводить шлях "c:/dir/dir2/../a.txt" до шляху "c:/dir/a.txt" |
Path relativize(Path other) |
Обчислює відносний шлях двох шляхів – «різницю шляхів» |
Path resolve(String other) |
Відновлює абсолютний шлях по поточному та відносному. |
URI toUri() |
Повертає URI поточного шляху/файлу. |
Path toAbsolutePath() |
Приводить шлях до абсолютного, якщо був відносний. |
File toFile() |
Повертає об'єкт File, який відповідає поточному об'єкту Path. |
— А поточний шлях – що це?
— Це той шлях, який було передано до конструктора об'єкта Path, методи якого викликаються. Path – це «шлях» англійською.
— Ок. А які методи є у класу? Files?
— Ну і куди ж ти так поспішаєш? Нині все розповім. Ось основні методи:
Методи класу Files | Опис |
---|---|
Path createFile(…) |
Створює файл на диску. |
Path createDirectory(…) |
Створює директорію. |
Path createDirectories(…) |
Створює директорію та піддиректорії. |
Path createTempFile(…) |
Створює «тимчасовий файл» |
Path createTempDirectory(…) |
Створює «тимчасову директорію» |
void delete(Path path) |
Видаляє файл/директорію. |
Path copy(Path source, Path target,…) |
Копіює файл. |
Path move(Path source, Path target,…) |
Переміщує файл. |
boolean isSameFile(Path, Path) |
Порівнює два файли. |
boolean isDirectory(Path) |
Шлях — це директорія? |
boolean isRegularFile(Path) |
Шлях – це файл? |
long size(Path) |
Повертає розмір файлу. |
boolean exists(Path) |
Об'єкт із таким ім'ям існує? |
boolean notExists(Path) |
Об'єкт з такою назвою не існує? |
long copy(Path, OutputStream) |
Копіює всі байти з Path в OutputStream. |
long copy(InputStream, Path) |
Копіює всі байти з InputStream в Path. |
byte[] read(InputStream, int initialSize) |
Читає масив байт з InputStream. |
byte[] readAllBytes(Path path) |
Читає всі байти з InputStream. |
List<String> readAllLines(Path path,..) |
Читає текстовий файл, повертає список рядків. |
Path write(Path path, byte[] bytes,…) |
Пише масив байт у файл. |
— Як цікаво, стільки крутих функцій і все в одному місці.
А навіщо потрібні тимчасові файли?
— Ну дивись. Допустимо, ти хочеш скачати файл з інтернету, а потім відправити його комусь. Для цього дуже зручно створити тимчасовий файл на диску та зберігати лічені дані в нього.
— А чи складно завантажити файл з інтернету?
— Дуже просто. Дивись приклад:
URL url = new URL("< span class="text-green">https://www.google.com.ua/images/srpr/logo11w.png");
InputStream inputStream = url.openStream();
Path tempFile = Files.createTempFile(" temp-", ".tmp");
Files.copy(inputStream, tempFile);
— І це все?
— Так, а що ти сподівався тут побачити? Тут лише 4 рядки.
Рядок номер 1. Створюється об'єкт URL, куди передається посилання в інтернеті на файл з картинкою.
Рядок номер 2. У об'єкта url відкривається потік на читання файлу – InputStream.
Рядок номер 4. За допомогою методу createTempFile
створюється тимчасовий файл.
Рядок номер 5. Метод Files.copy копіює дані з inputStream
в tempFile
. Все.
— Геніально!
— Чудово, радий, що тобі сподобалося. Думаю, з рештою методів ти розберешся сам. А я попрошу Дієго дати тобі кілька завдань на них.
Ось тобі, до речі, гарне посилання на цей матеріал:
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ