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 einheitlichIOExceptionzur Behandlung von Ausnahmen bei Dateioperationen
  • Arbeitet mit Path: Wird hauptsächlich mit derjava.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:

Methode Beschreibung
Dateioperationen
static Path copy(Path source, Path target, CopyOption... options) Kopiert eine Datei vom Quellpfad zum Zielpfad
static Path move(Path source, Path target, CopyOption... options) Verschiebt eine Datei oder benennt sie um
static void delete(Path path) Löscht eine Datei
static boolean deleteIfExists(Path path) Löscht eine Datei, wenn sie existiert
Dateiattribute
static boolean exists(Path path, LinkOption... options) Prüft, ob eine Datei existiert
static boolean isDirectory(Path path, LinkOption... options) Prüft, ob der Pfad ein Verzeichnis ist
static boolean isRegularFile(Path path, LinkOption... options) Prüft, ob der Pfad eine reguläre Datei ist
static boolean isReadable(Path path) Prüft, ob eine Datei lesbar ist
static boolean isWritable(Path path) Prüft, ob eine Datei beschreibbar ist
static boolean isExecutable(Path path) Prüft, ob eine Datei ausführbar ist
static long size(Path path) Gibt die Dateigröße zurück (Bytes)
static FileTime getLastModifiedTime(Path path, LinkOption... options) Ruft die letzte Änderungszeit der Datei ab
Dateiinhalt-Operationen
static byte[] readAllBytes(Path path) Liest alle Bytes einer Datei
static List<String> readAllLines(Path path) Liest alle Zeilen einer Datei
static List<String> readAllLines(Path path, Charset cs) Liest alle Zeilen einer Datei unter Verwendung eines angegebenen Zeichensatzes
static Stream<String> lines(Path path) Gibt einen Stream von Zeilen in der Datei zurück
static Stream<String> lines(Path path, Charset cs) Gibt einen Stream von Zeilen in der Datei unter Verwendung eines angegebenen Zeichensatzes zurück
static Path write(Path path, byte[] bytes, OpenOption... options) Schreibt Bytes in eine Datei
static Path write(Path path, Iterable<? extends CharSequence> lines, OpenOption... options) Schreibt Textzeilen in eine Datei
Verzeichnisoperationen
static Stream<Path> list(Path dir) Listet Einträge in einem Verzeichnis auf
static DirectoryStream<Path> newDirectoryStream(Path dir) Öffnet einen Verzeichnisstrom
static Path createDirectory(Path dir, FileAttribute<?>... attrs) Erstellt ein Verzeichnis
static Path createDirectories(Path dir, FileAttribute<?>... attrs) Erstellt ein Verzeichnis (einschließlich aller nicht vorhandenen übergeordneten Verzeichnisse)
Temporäre Dateien/Verzeichnisse
static Path createTempFile(Path dir, String prefix, String suffix, FileAttribute<?>... attrs) Erstellt eine temporäre Datei
static Path createTempDirectory(Path dir, String prefix, FileAttribute<?>... attrs) Erstellt ein temporäres Verzeichnis
Andere
static Path createFile(Path path, FileAttribute<?>... attrs) Erstellt eine neue Datei
static SeekableByteChannel newByteChannel(Path path, OpenOption... options) Öffnet oder erstellt eine Datei und gibt einen positionierbaren Bytekanal zurück
static InputStream newInputStream(Path path, OpenOption... options) Öffnet einen Dateieingabestrom
static OutputStream newOutputStream(Path path, OpenOption... options) Öffnet einen Dateiausgabestrom
static BufferedReader newBufferedReader(Path path) Öffnet einen gepufferten Reader
static BufferedWriter newBufferedWriter(Path path, OpenOption... options) Öffnet einen gepufferten Writer
static String probeContentType(Path path) Ermittelt den Inhaltstyp einer Datei

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);

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);

2. Verzeichnisoperationen

Verzeichnisse erstellen

Beispiel

// Ein einstufiges Verzeichnis erstellen
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);
}

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);

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);

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);
}

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");

3. Dateiattributansichten

Beispiel

// Dateieigentümer abrufen
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());
}

2. Ressourcenbereinigung

Beispiel

try (Stream<String> lines = Files.lines(path)) {
    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 vonFiles.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.

Andere Erweiterungen