„О, Риши! Здравей!“

"Здравей, Амиго! Как е животът?"

"Страхотно. Билаабо току-що ми каза куп интересни неща за File и How да работя с него."

— Както се случи, мисля, че имам Howво да добавя по тази тема.

"Наистина ли? Тогава съм целият в ушите."

„Добре, слушайте. Java непрекъснато се развива. Неговите разработчици непрекъснато търсят нови начини да правят различни неща по-ефективно. В Java 7 те добавиха алтернатива към класа File.“

Файлове, път - 1

"Алтернатива?"

„Да. Те взеха класа File като основа, добавиха някои нови неща, преименуваха методите и след това също го разделиха на две. Така че сега има два нови класа: Path и FilesPath всъщност е новият аналог на File и File е помощен клас (аналогично на класовете Arrays и Collections). Всички статични методи на класа File отиват там. Правейки го по този начин е „по-правилно“ от гледна точка на ООП."

„Е, ако е по отношение на ООП, тогава добре. И така, Howво се промени?“

„Първо, те решиха да не възпроизвеждат методите, които връщат  String  и File обекти. В класа Path  всички методи връщат Path .

„Второ, те преместиха много статични помощни методи в класа Files .“

„Трето, стана по-удобно да се работи с относителни пътища.“

„Ето списък с методите:“

Методи на класа Path Описание
boolean isAbsolute() Връща true, ако пътят е абсолютен.
Path getRoot() Връща корена на текущия път, т.е. най-горната директория.
Path getFileName() Връща името на file от текущия път.
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.

— А сегашният път — Howво е това?

„Това е пътят, който беше предаден на конструктора на обекта Path, чиито методи се извикват.“

"ОК. И така, Howви методи има класът 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) Сравнява два file.
boolean isDirectory(Path) Пътят директория ли е?
boolean isRegularFile(Path) Пътят файл ли е?
long size(Path) Връща размера на file.
boolean exists(Path) Съществува ли обект със същото име?
boolean notExists(Path) Не съществува ли обект със същото име?
long copy(InputStream, OutputStream) Копира byteове от InputStream към OutputStream.
long copy(Path, OutputStream) Копира всички byteове от пътя към OutputStream.
long copy(InputStream, Path) Копира всички byteове от InputStream към пътя.
byte[] read(InputStream, int initialSize) Чете масив от byteове от InputStream.
byte[] readAllBytes(Path path) Чете всички byteове от InputStream.
List<String> readAllLines(Path path,..) Чете текстовия файл и връща списък с низове.
Path write(Path path, byte[] bytes,…) Записва масив от byteове във файл.

„Колко интересно! Толкова много готини функции и всичките на едно и също място.“

"Ами вижте. Да предположим, че искате да изтеглите файл от Интернет и след това да го изпратите на някого. За да направите това, е много удобно да създадете временен файл на диска и да запазите прочетените данни в него."

„Трудно ли е да изтеглите файл от интернет?“

„Много е просто. Вижте този пример:“

Код
URL url = new URL("https://www.google.com.ua/images/srpr/logo11w.png");
InputStream inputStream = url.openStream();

Path tempFile = Files.createTempFile("temp-",".tmp");
Files.copy(inputStream, tempFile);

"И това е?"

"Да, Howво очаквахте да видите? Има само 4 реда."

" Ред 1.  Създава URL обект, към който се предава URL addressът на file с изображение.

" Ред 2.  В url обекта се отваря поток за четене на файл (InputStream).

" Ред 3.  Методът createTempFileсе използва за създаване на временен файл.

" Ред 4.  Методът Files.copy копира данни от  inputStream в tempFile. Това е."

— Гениално!

"Страхотно. Радвам се, че ти харесва. Мисля, че можеш сам да разбереш останалите методи. И ще помоля Диего да ти даде няколко задачи за тях."

„Между другото, ето добра връзка към този материал“