— О, Ріша, чудово!

— Привіт, Аміго! Як життя?

— Чудово. Щойно Білаабо розповідав купу цікавого про File і як з ним працювати.

— Думаю, я маю що додати на цю тему.

— Так? Тоді із задоволенням послухаю.

— Тоді слухай. Java постійно розвивається, постійно шукаються нові способи робити різні речі ефективніше. Ще Java 7 була додана альтернатива класу File.

Files, Path - 1

— Альтернатива?

— Ага. Взяли за основу клас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. Все.

— Геніально!

— Чудово, радий, що тобі сподобалося. Думаю, з рештою методів ти розберешся сам. А я попрошу Дієго дати тобі кілька завдань на них.

Ось тобі, до речі, гарне посилання на цей матеріал:

Посилання на матеріал