1. PathKlasse

Wenn Sie ein Programm schreiben möchten, das etwas mit Dateien auf der Festplatte macht, ist das ganz einfach. Java verfügt über zahlreiche Klassen, die Ihnen bei der Arbeit sowohl mit den Dateien selbst als auch mit deren Inhalten helfen.

Frühe Versionen von Java verwendeten Klassen wie Fileund, FileInputStreamum mit Dateien zu arbeiten. Die Klasse ist jedoch Fileinzwischen veraltet und wird nicht zur Verwendung empfohlen. Natürlich kann es immer noch in Code, Methodenparametern oder Klassenkonstruktoren vorkommen.

Von Anfang an lernen wir mit der PathKlasse, wie man mit Dateien arbeitet. Pathist die Klasse, die ersetzt hat File. Es ist sicherer und effizienter.

PathKlasse

Technisch gesehen Pathhandelt es sich nicht um eine Klasse, sondern um eine Schnittstelle. Dies geschieht, um das Schreiben eines Nachkommen der PathKlasse für jedes Betriebssystem (und Dateisystem) zu ermöglichen.

Windows hat einen Standard zum Schreiben von Dateipfaden und Linux einen anderen. Natürlich gibt es auf der Welt noch viele andere Betriebssysteme und jedes hat seinen eigenen Standard.

Aus diesem Grund wird die PathSchnittstelle überall in den Methoden verwendet, die mit Dateien arbeiten, obwohl die Arbeit in Wirklichkeit über ihre Nachkommenklassen erfolgt: WindowsPath, UnixPath, ...

PathEin Objekt erstellen

Um ein PathObjekt zu erstellen (das tatsächlich ein Objekt der WindowsPathabgeleiteten Klasse sein wird), müssen Sie eine Anweisung wie diese verwenden:

Path name = Path.of(path);

Dabei nameist der Name einer PathVariablen und pathder Pfad zur Datei (oder zum Verzeichnis) einschließlich des Namens der Datei (oder des Verzeichnisses). Und ofist eine statische Methode der PathKlasse.

Die of()Methode wird zum Erstellen von WindowsPathObjekten verwendet, wenn das Programm unter Windows ausgeführt wird. Wenn das Programm unter Linux läuft, UnixPathwerden Objekte erstellt. Sie können kein PathObjekt mit Code wie erstellen .new Path()

Beispiele:

Code Notiz
Path file = Path.of("c:\\projects\\note.txt");
Pfad zur Datei
Path directory = Path.of("c:\\projects\\");
Pfad zum Verzeichnis

Die Datei (oder das Verzeichnis) muss nicht vorhanden sein, damit ein gültiges PathObjekt vorhanden ist. Vielleicht möchten Sie einfach nur eine Datei erstellen ... Ein PathObjekt ist wie ein aufgemotztes StringObjekt: Es ist nicht an eine bestimmte Datei auf der Festplatte gebunden – es speichert lediglich einen bestimmten Pfad auf der Festplatte. Das ist es.


2. Methoden des PathTyps

Die PathSchnittstelle verfügt über einige interessante Methoden. Die interessantesten sind in der folgenden Tabelle aufgeführt.

Methode Beschreibung
Path getParent()
Gibt das übergeordnete Verzeichnis zurück
Path getFileName()
Gibt den Dateinamen ohne Verzeichnis zurück
Path getRoot()
Gibt das Stammverzeichnis aus einem Pfad zurück
boolean isAbsolute()
Prüft, ob der aktuelle Pfad absolut ist
Path toAbsolutePath()
Wandelt den Pfad in einen absoluten Pfad um
Path normalize()
Entfernt Platzhalter in einem Verzeichnisnamen.
Path resolve(Path other)
Konstruiert einen neuen absoluten Pfad aus absoluten und relativen Pfaden.
Path relativize(Path other)
Ruft einen relativen Pfad aus zwei absoluten Pfaden ab.
boolean startsWith(Path other)
Überprüft, ob der aktuelle Pfad mit einem bestimmten Pfad beginnt
boolean endsWith(Path other)
Prüft, ob der aktuelle Pfad mit einem angegebenen Pfad endet
int getNameCount()
Teilt den Pfad in Teile auf und dient /als Trennzeichen.
Gibt die Anzahl der Teile zurück.
Path getName(int index)
Teilt den Pfad in Teile auf und dient /als Trennzeichen.
Gibt einen Teil anhand seines Index zurück.
Path subpath(int beginIndex, int endIndex)
Teilt den Pfad in Teile auf und dient /als Trennzeichen.
Gibt den Unterpfad zurück, der dem angegebenen Intervall entspricht.
File toFile()
Konvertiert ein PathObjekt in ein veraltetes FileObjekt
URI toUri()
Konvertiert ein PathObjekt in ein URIObjekt

Nachfolgend finden Sie eine kurze Beschreibung der vorhandenen Methoden.


3. Einen Pfad in Teile aufteilen

Die getParent()Methode gibt den Pfad zurück, der auf das übergeordnete Verzeichnis für den aktuellen Pfad verweist. Unabhängig davon, ob es sich bei diesem Pfad um ein Verzeichnis oder eine Datei handelt:

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

Die getFileName()Methode gibt einen einzelnen Datei- (oder Verzeichnis-)Namen zurück – unabhängig davon, was nach dem letzten Trennzeichen kommt:

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

Die getRoot()Methode gibt den Pfad zum Stammverzeichnis zurück:

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


4. Absolute und relative Pfade

Es gibt zwei Arten von Pfaden: absolute und relative. Ein absoluter Pfad beginnt im Stammverzeichnis. Für Windows könnte dies der c:\Ordner sein; für Linux – das /Verzeichnis

Ein relativer Pfad ist relativ zu einem Verzeichnis sinnvoll. Das heißt, es ist wie das Ende des Weges, aber ohne Anfang. Sie können einen relativen Pfad in einen absoluten Pfad umwandeln und umgekehrt

boolean isAbsolute()Methode

Die Methode prüft, ob der aktuelle Pfad absolut ist

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

Wandelt den Pfad in einen absoluten Pfad um. Fügt bei Bedarf das aktuelle Arbeitsverzeichnis hinzu:

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

Im Pfad können Sie anstelle eines Verzeichnisnamens „..“ schreiben, was bedeutet, dass Sie ein Verzeichnis zurückgehen . Durch die Normalisierung werden diese Dinge beseitigt. Beispiele:

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

Mit dieser relativize()Methode können Sie die „Unterschiede zwischen Pfaden“ konstruieren: einen Pfad relativ zu einem anderen

Code Wert
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:
die beiden Pfade haben ein unterschiedliches „Root“ (verschiedene Festplatten)

Path resolve(Path other)Methode

Die resolve()Methode macht das Gegenteil von relativize(): Sie erstellt einen neuen absoluten Pfad aus einem absoluten und einem relativen Pfad.

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

Die Methode gibt ein veraltetes FileObjekt zurück, das denselben Dateipfad wie das PathObjekt speichert.

toURI()Methode

Die Methode konvertiert den Pfad in einen Standard- URI und gibt ein Objekt zurück, das den Pfad zur Datei enthält:

Pfad zur Datei URI zur Datei
c:\windows\projects\note.txt
file:///c:/windows/projects/note.txt