1. Pathklasse

Hvis du vil skrive et program, der gør noget med filer på disk, er det ret nemt. Java har en masse klasser, der hjælper dig med at arbejde med både selve filerne og deres indhold.

Tidlige versioner af Java brugte klasser som Fileog FileInputStreamtil at arbejde med filer. Klassen er dog Filenu forældet og anbefales ikke til brug. Selvfølgelig kan du stadig støde på det i kode, metodeparametre eller klassekonstruktører.

Lige fra starten begynder vi at lære, hvordan man arbejder med filer ved hjælp af klassen Path. Pather den klasse, der erstattede File. Det er mere sikkert og mere effektivt.

Pathklasse

Teknisk set Pather det ikke en klasse - det er en grænseflade. Dette gøres for at tillade skrivning af en efterkommer af Pathklassen for hvert operativsystem (og filsystem).

Windows har én standard til at skrive filstier, og Linux har en anden. Selvfølgelig er der mange andre operativsystemer i verden, og hver har sin egen standard.

Det er derfor, Pathgrænsefladen bruges overalt i de metoder, der arbejder med filer, selvom arbejdet i virkeligheden foregår gennem dens efterkommerklasser: WindowsPath, UnixPath, ...

Oprettelse af et Pathobjekt

For at oprette et Pathobjekt (som faktisk vil være et objekt af efterkommerklassen WindowsPath), skal du bruge en sætning som denne:

Path name = Path.of(path);

Hvor nameer navnet på en Pathvariabel, og pather stien til filen (eller mappen) inklusive navnet på filen (eller mappen). Og ofer en statisk metode i Pathklassen.

Metoden of()bruges til at oprette WindowsPathobjekter, hvis programmet kører på Windows. Hvis programmet kører på Linux, UnixPathoprettes objekter. Du kan ikke oprette et Pathobjekt ved hjælp af kode som .new Path()

Eksempler:

Kode Bemærk
Path file = Path.of("c:\\projects\\note.txt");
Stien til filen
Path directory = Path.of("c:\\projects\\");
Sti til mappen

Filen (eller mappen) behøver ikke at eksistere for at et gyldigt Pathobjekt eksisterer. Måske vil du bare oprette en fil... Et Pathobjekt er som et opskruet objekt String: det er ikke bundet til en bestemt fil på disken - det gemmer bare en bestemt sti på disken. Det er det.


2. Metoder af Pathtypen

Grænsefladen Pathhar en del interessante metoder. De mest interessante er præsenteret i tabellen nedenfor.

Metode Beskrivelse
Path getParent()
Returnerer den overordnede mappe
Path getFileName()
Returnerer filnavnet uden mappen
Path getRoot()
Returnerer rodmappen fra en sti
boolean isAbsolute()
Kontrollerer, om den aktuelle sti er absolut
Path toAbsolutePath()
Konverterer stien til absolut
Path normalize()
Fjerner jokertegn i et mappenavn.
Path resolve(Path other)
Konstruerer en ny absolut vej fra absolutte og relative stier.
Path relativize(Path other)
Får en relativ sti fra to absolutte stier.
boolean startsWith(Path other)
Kontrollerer, om den aktuelle sti starter med en given sti
boolean endsWith(Path other)
Kontrollerer, om den aktuelle sti ender med en given sti
int getNameCount()
Opdeler stien i dele ved hjælp /af en afgrænsning.
Returnerer antallet af dele.
Path getName(int index)
Opdeler stien i dele ved hjælp /af en afgrænsning.
Returnerer en del efter dens indeks.
Path subpath(int beginIndex, int endIndex)
Opdeler stien i dele ved hjælp /af en afgrænsning.
Returnerer den understi, der svarer til det givne interval.
File toFile()
Konverterer et Pathobjekt til et forældet Fileobjekt
URI toUri()
Konverterer et Pathobjekt til et URIobjekt

Nedenfor er en kort beskrivelse af de eksisterende metoder.


3. Opdeling af en sti i dele

Metoden getParent()returnerer stien, der peger på det overordnede bibliotek for den aktuelle sti. Uanset om denne sti er en mappe eller en fil:

Kode Værdi
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()returnerer et enkelt fil- (eller mappenavn) - hvad end der kommer efter den sidste afgrænser:

Kode Værdi
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()returnerer stien til rodmappen:

Kode Værdi
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getRoot();
"c:\\"


4. Absolutte og relative veje

Der er to typer stier: absolut og relativ. En absolut sti starter fra rodmappen. For Windows kan dette være c:\mappen; for Linux — /biblioteket

En relativ sti er meningsfuld i forhold til en eller anden mappe. Det vil sige, at det er som enden af ​​vejen, men uden begyndelsen. Du kan gøre en relativ sti til en absolut sti og omvendt

boolean isAbsolute()metode

Metoden kontrollerer, om den aktuelle sti er absolut

Kode Værdi
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()metode

Konverterer stien til absolut. Tilføj om nødvendigt den aktuelle arbejdsmappe til den:

Kode Værdi
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()metode

I stien, i stedet for et biblioteksnavn, kan du skrive "..", hvilket betyder gå en mappe tilbage . Normalisering eliminerer disse ting. Eksempler:

Kode Værdi
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)metode

Metoden relativize()lader dig konstruere "forskellene mellem stier": en sti i forhold til en anden

Kode Værdi
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);
UlovligArgumentundtagelse:
de to stier har en forskellig "rod" (forskellige diske)

Path resolve(Path other)metode

Metoden resolve()gør det modsatte af relativize(): den bygger en ny absolut vej ud fra en absolut og en relativ vej.

Kode Værdi
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()metode

Metoden returnerer et forældet Fileobjekt, der gemmer den samme filsti som Pathobjektet.

toURI()metode

Metoden konverterer stien til en standard- URI og returnerer et objekt, der indeholder stien til filen:

Stien til filen URI til filen
c:\windows\projects\note.txt
file:///c:/windows/projects/note.txt