1. Pathosztály

Ha olyan programot akarunk írni, amely a lemezen lévő fájlokkal csinál valamit, az elég egyszerű. A Java számos osztályt tartalmaz, amelyek segítenek magukkal a fájlokkal és azok tartalmával való munkavégzésben.

A Java korai verziói olyan osztályokat használtak, mint a Fileés FileInputStreama fájlokkal való munkavégzés. Az osztály azonban Filemár elavult, és nem javasolt a használata. Természetesen továbbra is találkozhat vele a kódban, a metódusparaméterekben vagy az osztálykonstruktorokban.

Kezdettől fogva elkezdjük megtanulni, hogyan kell a fájlokkal dolgozni az Pathosztály segítségével. Pathaz az osztály, amely a File. Biztonságosabb és hatékonyabb.

Pathosztály

Technikailag Pathnem egy osztály – ez egy interfész. PathEz azért történik, hogy minden operációs rendszerhez (és fájlrendszerhez) lehessen írni az osztály leszármazottját .

A Windows egy szabványt tartalmaz a fájl elérési útjainak írására, a Linux pedig egy másikat. Természetesen sok más operációs rendszer is létezik a világon, és mindegyiknek megvan a maga szabványa.

Ezért a Pathfelületet mindenhol használják a fájlokkal dolgozó metódusokban, pedig a valóságban a munka a leszármazott osztályokon keresztül történik: WindowsPath, UnixPath, ...

PathObjektum létrehozása

Egy objektum létrehozásához Path(amely valójában a leszármazott osztály objektuma lesz WindowsPath), egy ehhez hasonló utasítást kell használnia:

Path name = Path.of(path);

Ahol nameegy változó neve Path, és patha fájl (vagy könyvtár) elérési útja, beleértve a fájl (vagy könyvtár) nevét. És ofaz osztály statikus metódusa Path.

Ez a of()módszer objektumok létrehozására szolgál, WindowsPathha a program Windows rendszeren fut. Ha a program Linuxon fut, akkor UnixPathobjektumok jönnek létre. Nem hozhat létre Pathobjektumot olyan kóddal, mint a .new Path()

Példák:

Kód jegyzet
Path file = Path.of("c:\\projects\\note.txt");
A fájl elérési útja
Path directory = Path.of("c:\\projects\\");
Útvonal a könyvtárhoz

A fájlnak (vagy könyvtárnak) nem kell léteznie egy érvényes Pathobjektum létezéséhez. Lehet, hogy csak egy fájlt szeretne létrehozni... Egy Pathobjektum olyan, mint egy összerakott String: nincs hozzákötve egy adott fájlhoz a lemezen – csak egy bizonyos elérési utat tárol a lemezen. Ez az.


Path2. A típus módszerei

A Pathfelületnek jó néhány érdekes módszere van. A legérdekesebbeket az alábbi táblázat mutatja be.

Módszer Leírás
Path getParent()
Visszaadja a szülőkönyvtárat
Path getFileName()
A fájlnevet adja vissza a könyvtár nélkül
Path getRoot()
Egy elérési út gyökérkönyvtárát adja vissza
boolean isAbsolute()
Ellenőrzi, hogy az aktuális út abszolút-e
Path toAbsolutePath()
Az utat abszolúttá alakítja
Path normalize()
Eltávolítja a helyettesítő karaktereket a könyvtárnévből.
Path resolve(Path other)
Új abszolút útvonalat hoz létre abszolút és relatív útvonalakból.
Path relativize(Path other)
Relatív útvonalat kap két abszolút útból.
boolean startsWith(Path other)
Ellenőrzi, hogy az aktuális útvonal egy adott útvonallal kezdődik-e
boolean endsWith(Path other)
Ellenőrzi, hogy az aktuális útvonal egy adott útvonallal végződik-e
int getNameCount()
/Határolóként használva részekre osztja az útvonalat .
Az alkatrészek számát adja vissza.
Path getName(int index)
/Határolóként használva részekre osztja az útvonalat .
Egy alkatrészt az indexével tér vissza.
Path subpath(int beginIndex, int endIndex)
/Határolóként használva részekre osztja az útvonalat .
Az adott intervallumnak megfelelő alútvonalat adja vissza.
File toFile()
Egy Pathobjektumot elavult objektummá Filealakít át
URI toUri()
Objektumot Pathobjektummá alakít átURI

Az alábbiakban röviden ismertetjük a meglévő módszereket.


3. Út felosztása részekre

A getParent()metódus azt az elérési utat adja vissza, amely az aktuális elérési út szülőkönyvtárára mutat. Függetlenül attól, hogy ez az útvonal könyvtár vagy fájl:

Kód Érték
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).getParent();
"c:\\windows\\projects\\"
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getParent();
"c:\\windows\\"
String str = "c:\\";
Path path = Path.of(str).getParent();
null

A getFileName()metódus egyetlen fájl (vagy könyvtár) nevet ad vissza – függetlenül attól, ami az utolsó határoló után következik:

Kód Érték
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).getFileName();
"note.txt"
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getFileName();
"projects"
String str = "c:\\";
Path path = Path.of(str).getFileName();
null

A getRoot()metódus visszaadja a gyökérkönyvtár elérési útját:

Kód Érték
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getRoot();
"c:\\"


4. Abszolút és relatív utak

Kétféle út létezik: abszolút és relatív. Egy abszolút elérési út a gyökérkönyvtárból indul. Windows esetén ez lehet a c:\mappa; Linux esetén a /könyvtár

A relatív elérési út valamilyen könyvtárhoz képest értelmes. Vagyis olyan, mint az út vége, de eleje nélkül. A relatív útvonalat abszolút úttá alakíthatja, és fordítva

boolean isAbsolute()módszer

A metódus ellenőrzi, hogy az aktuális út abszolút-e

Kód Érték
String str = "c:\\windows\\projects\\note.txt";
boolean abs = Path.of(str).isAbsolute();
true
String str = "src\\com\\codegym\\Main.java";
boolean abs = Path.of(str).isAbsolute();
false

Path toAbsolutePath()módszer

Az utat abszolúttá alakítja. Ha szükséges, hozzáadja az aktuális munkakönyvtárat:

Kód Érték
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).toAbsolutePath();
"c:\\windows\\projects\\note.txt"
String str = "src\\com\\codegym\\Main.java";
Path path = Path.of(str).toAbsolutePath();
"d:\\work\\src\\com\\codegym\\Main.java"

Path normalize()módszer

Az elérési útba a könyvtárnév helyett írhat ".."-t, ami azt jelenti, hogy egy könyvtárat kell visszalépni . A normalizálás megszünteti ezeket a dolgokat. Példák:

Kód Érték
String str = "c:\\windows\\..\\projects\\note.txt";
Path path = Path.of(str).normalize();
"c:\\projects\\note.txt"
String str = "src\\com\\codegym\\..\\Main.java";
Path path = Path.of(str).normalize();
"src\\com\\Main.java"

Path relativize(Path other)módszer

A relativize()módszer lehetővé teszi az „útvonalak közötti különbségek” megalkotását: az egyik útvonalat a másikhoz viszonyítva

Kód Érték
Path path1 = Path.of("c:\\windows\\projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path2.relativize(path1);
"projects\\note.txt"
Path path1 = Path.of("c:\\windows\\projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path1.relativize(path2);
"..\\.."
Path path1 = Path.of("c:\\aaa\\bbb\\1.txt");
Path path2 = Path.of("d:\\zzz\\y.jpg");
Path result = path1.relativize(path2);
IllegalArgumentException:
a két útvonalnak más a "gyökere" (különböző lemezek)

Path resolve(Path other)módszer

A resolve()módszer az ellenkezőjét teszi relativize(): új abszolút utat épít fel egy abszolút és egy relatív útból.

Kód Érték
Path path1 = Path.of("projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path1.resolve(path2);
"c:\\windows"
Path path1 = Path.of("projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path2.resolve(path1);
"c:\\windows\\projects\\note.txt"

toFile()módszer

A metódus egy elavult Fileobjektumot ad vissza, amely ugyanazt a fájl elérési utat tárolja, mint az Pathobjektum.

toURI()módszer

A metódus átalakítja az elérési utat egy szabványos URI- vé , és visszaad egy objektumot, amely tartalmazza a fájl elérési útját:

A fájl elérési útja URI a fájlhoz
c:\windows\projects\note.txt
file:///c:/windows/projects/note.txt