"Ó, Rishi! Szia!"

"Szia Amigo! Milyen az élet?"

"Remek. Bilaabo az imént egy csomó érdekes dolgot mesélt nekem File-ról, és arról, hogyan kell vele dolgozni."

– Ahogy megtörténik, azt hiszem, van mit hozzátennem ehhez a témához.

"Tényleg? Akkor csak füles vagyok."

"Rendben, figyeljen. A Java folyamatosan fejlődik. Fejlesztői folyamatosan új módszereket keresnek a különböző dolgok hatékonyabb elvégzésére. A Java 7-ben egy alternatívát adtak a File osztályhoz."

Fájlok, elérési út - 1

"Alternatív?"

"Igen. A Fájl osztályt vették alapul, hozzáadtak néhány új dolgot, átnevezték a metódusokat, majd kettéosztották. Tehát most két új osztály van: Path és FilesA Path valójában a fájl új analógja osztály, a File pedig egy segédprogram osztály (hasonlóan az Arrays és Collections osztályokkal). A File osztály összes statikus metódusa ide kerül. Ha így csinálod, az OOP szempontjából 'helyesebb'."

"Nos, ha az OOP szempontjából, akkor rendben. Szóval mi változott?"

"Először is úgy döntöttek, hogy nem reprodukálják azokat a metódusokat, amelyek  String  és File objektumokat adtak vissza. A Path  osztályban minden metódus elérési utat ad vissza .

"Másodszor, sok statikus segédprogramot áthelyeztek a Fájlok osztályba."

"Harmadszor, kényelmesebbé vált a relatív utakkal dolgozni."

"Íme a módszerek listája:"

Az Ösvény osztály módszerei Leírás
boolean isAbsolute() Igaz értéket ad vissza, ha az elérési út abszolút.
Path getRoot() Az aktuális elérési út gyökerét adja vissza, azaz a legfelső könyvtárat.
Path getFileName() Az aktuális elérési útból származó fájlnevet adja vissza.
Path getParent() Visszaadja a könyvtárat az aktuális elérési útról.
boolean startsWith(Path other) Ellenőrzi, hogy az aktuális útvonal az átadott útvonallal kezdődik-e.
boolean endsWith(Path other) Ellenőrzi, hogy az aktuális útvonal véget ér-e az átadott útvonallal.
Path normalize() Normalizálja az aktuális útvonalat. Például a «c:/dir/dir2/../a.txt» fájlt «c:/dir/a.txt»-re konvertálja.
Path relativize(Path other) Kiszámítja két út relatív útját, azaz «az utak közötti különbséget»
Path resolve(String other) Abszolút útvonalat határoz meg az aktuális és a relatív útvonalak felhasználásával.
URI toUri() Az aktuális elérési út/fájl esetén az URI-t adja vissza.
Path toAbsolutePath() Az elérési utat abszolút útvonalmá alakítja, ha relatív.
File toFile() Egy fájl objektumot ad vissza, amely megfelel az aktuális Path objektumnak.

– És a jelenlegi út – mi az?

"Ez az az útvonal, amelyet átadtak annak a Path objektumnak a konstruktorának, amelynek metódusait hívják."

"Rendben. Tehát milyen metódusai vannak a Fájlok osztálynak?"

"Sietsz valahova? Mindjárt elmondom. Íme a legfontosabb módszerek:"

A Fájlok osztály módszerei Leírás
Path createFile(…) Létrehoz egy fájlt a lemezen.
Path createDirectory(…) Létrehoz egy könyvtárat.
Path createDirectories(…) Létrehoz egy könyvtárat és annak összes alkönyvtárát.
Path createTempFile(…) Létrehoz egy ideiglenes fájlt.
Path createTempDirectory(…) Létrehoz egy ideiglenes könyvtárat.
void delete(Path path) Töröl egy fájlt.
Path copy(Path source, Path target,…) Fájlokat másol.
Path move(Path source, Path target,…) Fájl áthelyezése.
boolean isSameFile(Path, Path) Összehasonlít két fájlt.
boolean isDirectory(Path) A Path egy könyvtár?
boolean isRegularFile(Path) Az elérési út egy fájl?
long size(Path) Visszaadja a fájl méretét.
boolean exists(Path) Létezik ilyen nevű objektum?
boolean notExists(Path) Nem létezik azonos nevű objektum?
long copy(InputStream, OutputStream) Bájtokat másol az InputStreamből az OutputStreambe.
long copy(Path, OutputStream) Minden bájtot másol az elérési útról az Output Streambe.
long copy(InputStream, Path) Az InputStream összes bájtját az elérési útra másolja.
byte[] read(InputStream, int initialSize) Egy bájttömböt olvas be az InputStreamből.
byte[] readAllBytes(Path path) Minden bájtot beolvas az InputStreamből.
List<String> readAllLines(Path path,..) Beolvassa a szövegfájlt, és visszaadja a karakterláncok listáját.
Path write(Path path, byte[] bytes,…) Egy bájttömböt ír egy fájlba.

"Milyen érdekes! Annyi klassz funkció, és mind egy helyen."

"Hát nézd. Tegyük fel, hogy szeretne letölteni egy fájlt az internetről, majd elküldeni valakinek. Ehhez nagyon kényelmes, ha létrehoz egy ideiglenes fájlt a lemezen, és arra menti az olvasott adatokat."

"Nehéz letölteni egy fájlt az internetről?"

"Ez nagyon egyszerű. Nézze meg ezt a példát:"

Kód
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);

"És ez az?"

"Igen, mire számítottál? Csak 4 sor van."

" 1. sor.  Létrehoz egy URL objektumot, amelyhez a képfájl URL-címét továbbítja.

" 2. sor.  Az url objektumon megnyílik egy adatfolyam (InputStream) egy fájl olvasásához.

" 3. sor.  A createTempFilemódszer ideiglenes fájl létrehozására szolgál.

" 4. sor.  A Files.copy metódus adatokat másol innen  inputStream : tempFile. Ez az."

"Ügyes!"

"Remek. Örülök, hogy tetszik. Szerintem a többi módszert magad is kitalálhatod. És megkérem Diegot, hogy adjon néhány feladatot velük kapcsolatban."

"Apropó, itt van egy jó link ehhez az anyaghoz"