„Och, Rishi! Cześć!”

„Cześć, Amigo! Jak tam życie?”

„Świetnie. Bilaabo właśnie opowiadał mi kilka interesujących rzeczy o Pliku io tym, jak z nim pracować”.

„Tak się składa, że ​​myślę, że mam coś do dodania w tym temacie”.

„Naprawdę? W takim razie zamieniam się w słuch”.

„Dobra, posłuchaj. Java stale ewoluuje. Jej programiści nieustannie szukają nowych sposobów wydajniejszego wykonywania różnych czynności. W Javie 7 dodali alternatywę dla klasy File”.

Pliki, ścieżka - 1

"Alternatywny?"

„Tak. Wzięli klasę File jako podstawę, dodali kilka nowych rzeczy, zmienili nazwy metod, a następnie podzielili ją na dwie części. Więc teraz są dwie nowe klasy: Path i FilesPath jest właściwie nowym odpowiednikiem File class, a File jest klasą użytkową (analogiczną do klas Arrays i Collections). Wszystkie statyczne metody klasy File są tam przenoszone. Robienie tego w ten sposób jest „bardziej poprawne” pod względem OOP.

„Cóż, jeśli chodzi o OOP, to w porządku. Więc co się zmieniło?”

„Po pierwsze, postanowili nie powielać metod, które zwracały  obiekty String  i File . W klasie Path  wszystkie metody zwracają Path .

„Po drugie, przenieśli wiele statycznych metod narzędziowych do klasy Files ”.

„Po trzecie, wygodniejsza stała się praca ze ścieżkami względnymi”.

„Oto lista metod:”

Metody klasy Path Opis
boolean isAbsolute() Zwraca true, jeśli ścieżka jest bezwzględna.
Path getRoot() Zwraca katalog główny bieżącej ścieżki, tj. najwyższy katalog.
Path getFileName() Zwraca nazwę pliku z bieżącej ścieżki.
Path getParent() Zwraca katalog z bieżącej ścieżki.
boolean startsWith(Path other) Sprawdza, czy bieżąca ścieżka zaczyna się od przekazanej ścieżki.
boolean endsWith(Path other) Sprawdza, czy bieżąca ścieżka kończy się przekazaną ścieżką.
Path normalize() Normalizuje bieżącą ścieżkę. Na przykład konwertuje «c:/dir/dir2/../a.txt» na «c:/dir/a.txt»
Path relativize(Path other) Oblicza względną ścieżkę dwóch ścieżek, tj. „różnicę między ścieżkami”
Path resolve(String other) Rozwiązuje ścieżkę bezwzględną przy użyciu ścieżek bieżących i względnych.
URI toUri() Zwraca identyfikator URI, jeśli bieżąca ścieżka/plik.
Path toAbsolutePath() Konwertuje ścieżkę na ścieżkę bezwzględną, jeśli jest względna.
File toFile() Zwraca obiekt File, który odpowiada bieżącemu obiektowi Path.

„A obecna ścieżka… co to jest?”

„To jest ścieżka, która została przekazana do konstruktora obiektu Path, którego metody są wywoływane”.

„OK. Więc jakie metody ma klasa Files ?”

„Spieszy Ci się gdzieś dotrzeć? Od razu Ci powiem. Oto najważniejsze metody:”

Metody klasy Files Opis
Path createFile(…) Tworzy plik na dysku.
Path createDirectory(…) Tworzy katalog.
Path createDirectories(…) Tworzy katalog i wszystkie jego podkatalogi.
Path createTempFile(…) Tworzy plik tymczasowy.
Path createTempDirectory(…) Tworzy katalog tymczasowy.
void delete(Path path) Usuwa plik.
Path copy(Path source, Path target,…) Kopiuje plik.
Path move(Path source, Path target,…) Przenosi plik.
boolean isSameFile(Path, Path) Porównuje dwa pliki.
boolean isDirectory(Path) Czy ścieżka jest katalogiem?
boolean isRegularFile(Path) Czy ścieżka jest plikiem?
long size(Path) Zwraca rozmiar pliku.
boolean exists(Path) Czy istnieje obiekt o tej samej nazwie?
boolean notExists(Path) Czy obiekt o tej samej nazwie nie istnieje?
long copy(InputStream, OutputStream) Kopiuje bajty z InputStream do OutputStream.
long copy(Path, OutputStream) Kopiuje wszystkie bajty z Path do OutputStream.
long copy(InputStream, Path) Kopiuje wszystkie bajty z InputStream do ścieżki.
byte[] read(InputStream, int initialSize) Odczytuje tablicę bajtów z InputStream.
byte[] readAllBytes(Path path) Odczytuje wszystkie bajty z InputStream.
List<String> readAllLines(Path path,..) Odczytuje plik tekstowy i zwraca listę ciągów znaków.
Path write(Path path, byte[] bytes,…) Zapisuje tablicę bajtów do pliku.

„Jakie to interesujące! Tyle fajnych funkcji i wszystko w tym samym miejscu”.

„No cóż. Załóżmy, że chcesz pobrać plik z Internetu, a następnie wysłać go do kogoś. Aby to zrobić, bardzo wygodnie jest utworzyć plik tymczasowy na dysku i zapisać w nim odczytane dane”.

„Czy pobranie pliku z Internetu jest trudne?”

„To bardzo proste. Spójrz na ten przykład:”

Kod
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);

"I to wszystko?"

„Tak, a co spodziewałeś się zobaczyć? Są tylko 4 linie”.

" Linia 1.  Tworzy obiekt URL, do którego przekazywany jest adres URL pliku obrazu.

" Linia 2.  Strumień do odczytu pliku (InputStream) jest otwierany na obiekcie url.

" Linia 3.  Metoda createTempFilesłuży do tworzenia pliku tymczasowego.

Linia 4.  Metoda Files.copy kopiuje dane z  inputStream do tempFile. To wszystko”.

"Pomysłowy!"

„Świetnie. Cieszę się, że ci się podoba. Myślę, że sam możesz wymyślić resztę metod. I poproszę Diego, żeby dał ci kilka zadań z nimi związanych”.

„Przy okazji, tutaj jest dobry link do tego materiału”