1. Pathklass

Om du vill skriva ett program som gör något med filer på disk är det ganska enkelt. Java har många klasser som hjälper dig att arbeta med både själva filerna och deras innehåll.

Tidiga versioner av Java använde klasser som Fileoch FileInputStreamför att arbeta med filer. Men Fileklassen är nu utfasad och rekommenderas inte för användning. Naturligtvis kan du fortfarande stöta på det i kod, metodparametrar eller klasskonstruktorer.

Redan från början kommer vi att börja lära oss hur man arbetar med filer med hjälp av Pathklassen. Pathär klassen som ersatte File. Det är säkrare och mer effektivt.

Pathklass

Tekniskt sett Pathär det inte en klass - det är ett gränssnitt. Detta görs för att tillåta skrivning av en avkomling av Pathklassen för varje operativsystem (och filsystem).

Windows har en standard för att skriva filsökvägar, och Linux har en annan. Naturligtvis finns det många andra operativsystem i världen, och alla har sin egen standard.

Det är därför Pathgränssnittet används överallt i metoderna som fungerar med filer, även om arbetet i verkligheten sker genom dess efterkommande klasser: , WindowsPath, UnixPath...

Skapa ett Pathobjekt

För att skapa ett Pathobjekt (som faktiskt kommer att vara ett objekt av den WindowsPathefterkommande klassen), måste du använda en sats så här:

Path name = Path.of(path);

Var nameär namnet på en Pathvariabel, och pathär sökvägen till filen (eller katalogen) inklusive namnet på filen (eller katalogen). Och ofär en statisk metod i Pathklassen.

Metoden of()används för att skapa WindowsPathobjekt om programmet körs på Windows. Om programmet körs på Linux UnixPathskapas objekt. Du kan inte skapa ett Pathobjekt med kod som .new Path()

Exempel:

Koda Notera
Path file = Path.of("c:\\projects\\note.txt");
Sökväg till filen
Path directory = Path.of("c:\\projects\\");
Sökväg till katalogen

Filen (eller katalogen) behöver inte existera för att ett giltigt Pathobjekt ska existera. Kanske vill du bara skapa en fil... Ett Pathobjekt är som ett hopfällt objekt String: det är inte knutet till en specifik fil på disken – det lagrar bara en viss sökväg på disken. Det är allt.


2. Metoder av Pathtypen

Gränssnittet Pathhar en hel del intressanta metoder. De mest intressanta presenteras i tabellen nedan.

Metod Beskrivning
Path getParent()
Returnerar den överordnade katalogen
Path getFileName()
Returnerar filnamnet utan katalogen
Path getRoot()
Returnerar rotkatalogen från en sökväg
boolean isAbsolute()
Kontrollerar om den aktuella sökvägen är absolut
Path toAbsolutePath()
Konverterar vägen till absolut
Path normalize()
Tar bort jokertecken i ett katalognamn.
Path resolve(Path other)
Konstruerar en ny absolut väg från absoluta och relativa vägar.
Path relativize(Path other)
Får en relativ väg från två absoluta banor.
boolean startsWith(Path other)
Kontrollerar om den aktuella vägen börjar med en given väg
boolean endsWith(Path other)
Kontrollerar om den aktuella vägen slutar med en given väg
int getNameCount()
Delar upp sökvägen i delar som används /som avgränsare.
Returnerar antalet delar.
Path getName(int index)
Delar upp sökvägen i delar som används /som avgränsare.
Returnerar en del med dess index.
Path subpath(int beginIndex, int endIndex)
Delar upp sökvägen i delar som används /som avgränsare.
Returnerar undersökvägen som motsvarar det givna intervallet.
File toFile()
Konverterar ett Pathobjekt till ett föråldrat Fileobjekt
URI toUri()
Konverterar ett Pathobjekt till ett URIobjekt

Nedan följer en kort beskrivning av de befintliga metoderna.


3. Dela upp en väg i delar

Metoden getParent()returnerar sökvägen som pekar till den överordnade katalogen för den aktuella sökvägen. Oavsett om denna sökväg är en katalog eller en fil:

Koda Värde
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

Metoden getFileName()returnerar ett enda fil- (eller katalognamn) - vad som än kommer efter den sista avgränsaren:

Koda Värde
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

Metoden getRoot()returnerar sökvägen till rotkatalogen:

Koda Värde
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getRoot();
"c:\\"


4. Absoluta och relativa vägar

Det finns två typer av vägar: absoluta och relativa. En absolut sökväg börjar från rotkatalogen. För Windows kan detta vara c:\mappen; för Linux — /katalogen

En relativ sökväg är meningsfull i förhållande till någon katalog. Det vill säga, det är som slutet på vägen, men utan början. Du kan förvandla en relativ väg till en absolut väg och vice versa

boolean isAbsolute()metod

Metoden kontrollerar om den aktuella sökvägen är absolut

Koda Värde
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

Konverterar vägen till absolut. Om det behövs lägger du till den aktuella arbetskatalogen till den:

Koda Värde
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

I sökvägen, istället för ett katalognamn, kan du skriva "..", vilket betyder gå tillbaka en katalog . Normalisering eliminerar dessa saker. Exempel:

Koda Värde
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

Metoden relativize()låter dig konstruera "skillnaderna mellan vägar": en väg i förhållande till en annan

Koda Värde
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:
de två vägarna har olika "root" (olika diskar)

Path resolve(Path other)metod

Metoden resolve()gör motsatsen till relativize(): den bygger en ny absolut väg från en absolut och en relativ väg.

Koda Värde
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

Metoden returnerar ett föråldrat Fileobjekt som lagrar samma filsökväg som Pathobjektet.

toURI()metod

Metoden konverterar sökvägen till en standard- URI och returnerar ett objekt som innehåller sökvägen till filen:

Sökväg till filen URI till filen
c:\windows\projects\note.txt
file:///c:/windows/projects/note.txt