1. Pathclasa

Dacă doriți să scrieți un program care face ceva cu fișierele de pe disc, este destul de ușor. Java are o mulțime de clase care vă ajută să lucrați atât cu fișierele în sine, cât și cu conținutul acestora.

Versiunile timpurii de Java foloseau clase precum Fileși FileInputStreampentru a lucra cu fișiere. Cu toate acestea, Fileclasa este acum depreciată și nu este recomandată pentru utilizare. Desigur, îl puteți întâlni în cod, parametrii metodei sau constructorii de clasă.

Încă de la început, vom începe să învățăm cum să lucrăm cu fișiere folosind Pathclasa. Patheste clasa care a înlocuit File. Este mai sigur și mai eficient.

Pathclasă

Din punct de vedere tehnic, Pathnu este o clasă - este o interfață. Acest lucru se face pentru a permite scrierea unui descendent al Pathclasei pentru fiecare sistem de operare (și sistem de fișiere).

Windows are un standard pentru scrierea căilor de fișiere, iar Linux are altul. Desigur, există multe alte sisteme de operare în lume și fiecare are propriul său standard.

De aceea, Pathinterfața este folosită peste tot în metodele care lucrează cu fișiere, deși, în realitate, munca se întâmplă prin clasele sale descendente: WindowsPath, UnixPath, ...

Crearea unui Pathobiect

Pentru a crea un Pathobiect (care va fi de fapt un obiect din WindowsPathclasa descendentă), trebuie să utilizați o declarație ca aceasta:

Path name = Path.of(path);

Unde nameeste numele unei Pathvariabile și patheste calea către fișier (sau director), inclusiv numele fișierului (sau director). Și ofeste o metodă statică a Pathclasei.

Metoda of()este folosită pentru a crea WindowsPathobiecte dacă programul rulează pe Windows. Dacă programul rulează pe Linux, atunci UnixPathobiectele sunt create. Nu puteți crea un Pathobiect folosind cod precum .new Path()

Exemple:

Cod Notă
Path file = Path.of("c:\\projects\\note.txt");
Calea către fișier
Path directory = Path.of("c:\\projects\\");
Calea către director

Fișierul (sau directorul) nu trebuie să existe pentru ca un Pathobiect valid să existe. Poate vrei doar să creezi un fișier... Un Pathobiect este ca un suped-up String: nu este legat de un anumit fișier de pe disc - doar stochează o anumită cale pe disc. Asta este.


2. Metode de Pathtip

Interfața Pathare destul de multe metode interesante. Cele mai interesante sunt prezentate în tabelul de mai jos.

Metodă Descriere
Path getParent()
Returnează directorul părinte
Path getFileName()
Returnează numele fișierului fără director
Path getRoot()
Returnează directorul rădăcină dintr-o cale
boolean isAbsolute()
Verifică dacă calea curentă este absolută
Path toAbsolutePath()
Transformă calea în absolut
Path normalize()
Elimină caracterele metalice dintr-un nume de director.
Path resolve(Path other)
Construiește o nouă cale absolută din căi absolute și relative.
Path relativize(Path other)
Obține o cale relativă de la două căi absolute.
boolean startsWith(Path other)
Verifică dacă calea curentă începe cu o cale dată
boolean endsWith(Path other)
Verifică dacă calea curentă se termină cu o cale dată
int getNameCount()
Împarte calea în părți folosind /ca delimitator.
Returnează numărul de piese.
Path getName(int index)
Împarte calea în părți folosind /ca delimitator.
Returnează o parte după indexul său.
Path subpath(int beginIndex, int endIndex)
Împarte calea în părți folosind /ca delimitator.
Returnează calea secundară care corespunde intervalului dat.
File toFile()
Convertește un obiect într-un obiect PathdepreciatFile
URI toUri()
Transformă un Pathobiect într-un URIobiect

Mai jos este o scurtă descriere a metodelor existente.


3. Împărțirea unei căi în părți

Metoda getParent()returnează calea care indică către directorul părinte pentru calea curentă. Indiferent dacă această cale este un director sau un fișier:

Cod Valoare
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

Metoda getFileName()returnează un singur nume de fișier (sau director) - orice vine după ultimul delimitator:

Cod Valoare
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

Metoda getRoot()returnează calea către directorul rădăcină:

Cod Valoare
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getRoot();
"c:\\"


4. Căi absolute și relative

Există două tipuri de căi: absolute și relative. O cale absolută începe din directorul rădăcină. Pentru Windows, acesta ar putea fi c:\folderul; pentru Linux — /directorul

O cale relativă este semnificativă în raport cu un anumit director. Adică e ca un capăt de drum, dar fără început. Puteți transforma o cale relativă într-o cale absolută și invers

boolean isAbsolute()metodă

Metoda verifică dacă calea curentă este absolută

Cod Valoare
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()metodă

Transformă calea în absolut. Dacă este necesar, adaugă directorul de lucru curent la acesta:

Cod Valoare
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()metodă

În cale, în loc de numele unui director, puteți scrie „..”, ceea ce înseamnă să reveniți cu un director . Normalizarea elimină aceste lucruri. Exemple:

Cod Valoare
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)metodă

Metoda relativize()vă permite să construiți „diferențele dintre căi”: o cale relativ la alta

Cod Valoare
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:
cele două căi au o „rădăcină” diferită (discuri diferite)

Path resolve(Path other)metodă

Metoda resolve()face opusul relativize(): construiește o nouă cale absolută dintr-o cale absolută și una relativă.

Cod Valoare
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()metodă

Metoda returnează un Fileobiect depreciat care stochează aceeași cale de fișier ca și Pathobiectul.

toURI()metodă

Metoda convertește calea într-un URI standard și returnează un obiect care conține calea către fișier:

Calea către fișier URI la fișier
c:\windows\projects\note.txt
file:///c:/windows/projects/note.txt