Java NIO Files-Klasse
java.nio.file.Filesist eine Hilfsklasse im Java NIO (New I/O)-Paket, angesiedelt in derjava.nio.filedas Paket verwenden.
java.nio.file.FilesEs bietet eine Reihe statischer Methoden zum Bearbeiten von Dateien und Verzeichnissen im Dateisystem, wodurch Datei-I/O-Operationen erheblich vereinfacht werden.
Hauptfunktionen
- Statische Methoden: Alle Methoden sind statisch, es muss keine Instanz erstellt werden
- Umfangreiche Funktionalität: Bietet verschiedene Funktionen wie Dateilesen/-schreiben, Attributoperationen, Verzeichnisdurchlauf usw.
- Ausnahmebehandlung: Verwendet einheitlich
IOExceptionzur Behandlung von Ausnahmen bei Dateioperationen - Arbeitet mit Path: Wird hauptsächlich mit der
java.nio.file.Pathinterface
Klassifizierung gängiger Methoden
Hinweis:Viele Methoden werfen IOException, daher ist beim Verwenden eine Ausnahmebehandlung erforderlich.
Im Folgenden werden gängige Methoden der Klasse java.nio.file.Files aufgeführt:
1. Dateioperationen
Dateien lesen/schreiben
Beispiel
// Alle Zeilen einer Datei lesen
List<String> lines = Files.readAllLines(path);
// In eine Datei schreiben
Files.write(path, content.getBytes());
// Schreiben im Anhängemodus
Files.write(path, content.getBytes(), StandardOpenOption.APPEND);
List<String> lines = Files.readAllLines(path);
// In eine Datei schreiben
Files.write(path, content.getBytes());
// Schreiben im Anhängemodus
Files.write(path, content.getBytes(), StandardOpenOption.APPEND);
Datei kopieren/verschieben/löschen
Beispiel
// Eine Datei kopieren
Files.copy(sourcePath, targetPath);
// Eine Datei verschieben/umbenennen
Files.move(sourcePath, targetPath);
// Eine Datei löschen
Files.delete(path);
Files.copy(sourcePath, targetPath);
// Eine Datei verschieben/umbenennen
Files.move(sourcePath, targetPath);
// Eine Datei löschen
Files.delete(path);
2. Verzeichnisoperationen
Verzeichnisse erstellen
Beispiel
// Ein einstufiges Verzeichnis erstellen
Files.createDirectory(path);
// Ein mehrstufiges Verzeichnis erstellen
Files.createDirectories(path);
Files.createDirectory(path);
// Ein mehrstufiges Verzeichnis erstellen
Files.createDirectories(path);
Verzeichnisdurchlauf
Beispiel
// Ein Verzeichnis durchlaufen
try (Stream<Path> paths = Files.list(directoryPath)) {
paths.forEach(System.out::println);
}
// Ein Verzeichnis rekursiv durchlaufen
try (Stream<Path> paths = Files.walk(directoryPath)) {
paths.forEach(System.out::println);
}
try (Stream<Path> paths = Files.list(directoryPath)) {
paths.forEach(System.out::println);
}
// Ein Verzeichnis rekursiv durchlaufen
try (Stream<Path> paths = Files.walk(directoryPath)) {
paths.forEach(System.out::println);
}
3. Operationen mit Dateiattributen
Dateiattribute abrufen
Beispiel
// Prüfen, ob eine Datei existiert
boolean exists = Files.exists(path);
// Dateigröße abrufen
long size = Files.size(path);
// Letzte Änderungszeit der Datei abrufen
FileTime lastModifiedTime = Files.getLastModifiedTime(path);
boolean exists = Files.exists(path);
// Dateigröße abrufen
long size = Files.size(path);
// Letzte Änderungszeit der Datei abrufen
FileTime lastModifiedTime = Files.getLastModifiedTime(path);
Festlegen von Dateiattributen
Beispiel
// Letzte Änderungszeit der Datei festlegen
Files.setLastModifiedTime(path, FileTime.fromMillis(System.currentTimeMillis()));
// Dateiberechtigungen festlegen
Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxr-x---");
Files.setPosixFilePermissions(path, perms);
Files.setLastModifiedTime(path, FileTime.fromMillis(System.currentTimeMillis()));
// Dateiberechtigungen festlegen
Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxr-x---");
Files.setPosixFilePermissions(path, perms);
Erweiterte Funktionen
1. Dateisuche
Beispiel
// Dateien mit einer bestimmten Erweiterung finden
try (Stream<Path> paths = Files.find(
directoryPath,
Integer.MAX_VALUE,
(path, attrs) -> path.toString().endsWith(".txt"))) {
paths.forEach(System.out::println);
}
try (Stream<Path> paths = Files.find(
directoryPath,
Integer.MAX_VALUE,
(path, attrs) -> path.toString().endsWith(".txt"))) {
paths.forEach(System.out::println);
}
2. Temporäre Dateioperationen
Beispiel
// Eine temporäre Datei erstellen
Path tempFile = Files.createTempFile("prefix", ".suffix");
// Temporäres Verzeichnis erstellen
Path tempDir = Files.createTempDirectory("tempDir");
Path tempFile = Files.createTempFile("prefix", ".suffix");
// Temporäres Verzeichnis erstellen
Path tempDir = Files.createTempDirectory("tempDir");
3. Dateiattributansichten
Beispiel
// Dateieigentümer abrufen
UserPrincipal owner = Files.getOwner(path);
// Dateispeicherinformationen abrufen
FileStore store = Files.getFileStore(path);
UserPrincipal owner = Files.getOwner(path);
// Dateispeicherinformationen abrufen
FileStore store = Files.getFileStore(path);
Best Practices
1. Ausnahmebehandlung
Beispiel
try {
Files.copy(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
System.err.println("Dateivorgang fehlgeschlagen: " + e.getMessage());
}
Files.copy(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
System.err.println("Dateivorgang fehlgeschlagen: " + e.getMessage());
}
2. Ressourcenbereinigung
Beispiel
try (Stream<String> lines = Files.lines(path)) {
lines.forEach(System.out::println);
} // Stream automatisch schließen
lines.forEach(System.out::println);
} // Stream automatisch schließen
3. Leistungsaspekte
- Verwenden Sie für große Dateien gepufferte Streams (
Files.newBufferedReader/Files.newBufferedWriter) - Für Batch-Vorgänge sollten Sie die Verwendung von
Files.walkanstelle von rekursiven Aufrufen in Betracht ziehen - Häufig zugegriffene Attribute können zwischengespeichert werden
Vergleich mit traditioneller E/A
| Merkmal | Files-Klasse (NIO) | Traditionelle E/A (java.io) |
|---|---|---|
| Methodentyp | Statische Methoden | Instanzmethoden |
| Pfadrepräsentation | Verwendet die Path-Schnittstelle | Verwendet die File-Klasse |
| Ausnahmebehandlung | Verwendet IOException einheitlich | Mehrere Ausnahmetypen |
| Funktionsvielfalt | Umfangreichere Funktionalität | Grundlegende Funktionalität |
| Umgang mit symbolischen Links | Native Unterstützung | Eingeschränkte Unterstützung |
| Dateiattributoperationen | Umfassender | Eingeschränkt |
Durch dieFilesKlasse, bietet Java eine modernere und leistungsfähigere Dateioperations-API. Es wird empfohlen, sie in neuen Projekten zu verwenden, um die traditionelle zu ersetzenjava.io.Fileclass.