1. Pathklasse

Als je een programma wilt schrijven dat iets doet met bestanden op schijf, is dat vrij eenvoudig. Java heeft veel klassen die u helpen bij het werken met zowel de bestanden zelf als hun inhoud.

Vroege versies van Java gebruikten klassen zoals Fileen FileInputStreamom met bestanden te werken. De klasse is nu echter Fileverouderd en wordt niet aanbevolen voor gebruik. Natuurlijk kunt u het nog steeds tegenkomen in code, methodeparameters of klasseconstructors.

Vanaf het begin zullen we beginnen met het leren werken met bestanden met behulp van de Pathklas. Pathis de klasse die File. Het is veiliger en efficiënter.

Pathklas

Technisch gezien Pathis het geen klasse - het is een interface. Dit wordt gedaan om het schrijven van een afstammeling van de Pathklasse voor elk besturingssysteem (en bestandssysteem) mogelijk te maken.

Windows heeft één standaard voor het schrijven van bestandspaden en Linux heeft een andere. Natuurlijk zijn er veel andere besturingssystemen in de wereld, en elk heeft zijn eigen standaard.

Daarom Pathwordt de interface overal gebruikt in de methodes die met bestanden werken, hoewel het werk in werkelijkheid gebeurt via de onderliggende klassen: WindowsPath, UnixPath, ...

Een Pathvoorwerp maken

Om een ​​object te maken (dat in werkelijkheid een object van de afstammingsklasse Pathzal zijn ), moet u een instructie als deze gebruiken:WindowsPath

Path name = Path.of(path);

Waar nameis de naam van een Pathvariabele en pathis het pad naar het bestand (of de map) inclusief de naam van het bestand (of de map). En ofis een statische methode van de Pathklasse.

De of()methode wordt gebruikt om WindowsPathobjecten te maken als het programma op Windows draait. Als het programma op Linux draait, UnixPathworden er objecten gemaakt. U kunt geen Pathobject maken met code zoals .new Path()

Voorbeelden:

Code Opmerking
Path file = Path.of("c:\\projects\\note.txt");
Pad naar het bestand
Path directory = Path.of("c:\\projects\\");
Pad naar de map

Het bestand (of de map) hoeft niet te bestaan ​​om een ​​geldig Pathobject te laten bestaan. Misschien wilt u gewoon een bestand maken... Een Pathobject is als een opgevoerd object String: het is niet gebonden aan een specifiek bestand op schijf — het slaat alleen een bepaald pad op schijf op. Dat is het.


2. Methoden van het Pathtype

De Pathinterface heeft nogal wat interessante methoden. De meest interessante worden weergegeven in de onderstaande tabel.

Methode Beschrijving
Path getParent()
Retourneert de bovenliggende map
Path getFileName()
Retourneert de bestandsnaam zonder de directory
Path getRoot()
Retourneert de hoofdmap van een pad
boolean isAbsolute()
Controleert of het huidige pad absoluut is
Path toAbsolutePath()
Converteert het pad naar absoluut
Path normalize()
Verwijdert jokertekens in een mapnaam.
Path resolve(Path other)
Construeert een nieuw absoluut pad uit absolute en relatieve paden.
Path relativize(Path other)
Haalt een relatief pad op uit twee absolute paden.
boolean startsWith(Path other)
Controleert of het huidige pad begint met een bepaald pad
boolean endsWith(Path other)
Controleert of het huidige pad eindigt met een bepaald pad
int getNameCount()
Splitst het pad in delen met /als scheidingsteken.
Retourneert het aantal onderdelen.
Path getName(int index)
Splitst het pad in delen met /als scheidingsteken.
Retourneert een onderdeel op basis van de index.
Path subpath(int beginIndex, int endIndex)
Splitst het pad in delen met /als scheidingsteken.
Retourneert het subpad dat overeenkomt met het gegeven interval.
File toFile()
Converteert een Pathobject naar een verouderd Fileobject
URI toUri()
Converteert een Pathobject naar een URIobject

Hieronder volgt een korte beschrijving van de bestaande methoden.


3. Een pad opsplitsen in delen

De getParent()methode retourneert het pad dat verwijst naar de bovenliggende map voor het huidige pad. Ongeacht of dit pad een map of een bestand is:

Code Waarde
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

De getFileName()methode retourneert een enkele bestands- (of directory-) naam — wat er ook na het laatste scheidingsteken komt:

Code Waarde
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

De getRoot()methode retourneert het pad naar de hoofdmap:

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


4. Absolute en relatieve paden

Er zijn twee soorten paden: absoluut en relatief. Een absoluut pad begint vanaf de hoofdmap. Voor Windows kan dit de c:\map zijn; voor Linux - de /map

Een relatief pad is zinvol ten opzichte van een map. Dat wil zeggen, het is als het einde van de weg, maar zonder het begin. U kunt van een relatief pad een absoluut pad maken en vice versa

boolean isAbsolute()methode

De methode controleert of het huidige pad absoluut is

Code Waarde
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()methode

Converteert het pad naar absoluut. Voeg indien nodig de huidige werkmap toe:

Code Waarde
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()methode

In het pad kunt u in plaats van een mapnaam ".." schrijven, wat betekent dat u één map teruggaat . Normalisatie elimineert deze dingen. Voorbeelden:

Code Waarde
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)methode

Met de relativize()methode kunt u de "verschillen tussen paden" construeren: het ene pad ten opzichte van het andere

Code Waarde
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);
Illegaal Argument Uitzondering:
de twee paden hebben een verschillende "root" (verschillende schijven)

Path resolve(Path other)methode

De resolve()methode doet het tegenovergestelde van relativize(): het bouwt een nieuw absoluut pad op uit een absoluut en een relatief pad.

Code Waarde
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()methode

De methode retourneert een gedeprecieerd Fileobject dat hetzelfde bestandspad opslaat als het Pathobject.

toURI()methode

De methode converteert het pad naar een standaard URI en retourneert een object dat het pad naar het bestand bevat:

Pad naar het bestand URI naar het bestand
c:\windows\projects\note.txt
file:///c:/windows/projects/note.txt