Java java.nio.file.Files move()-Methode

Java File Java java.nio.file.Files


java.nio.file.Files.move()Die Methode ist die Kernmethode im Java-NIO-Paket (New I/O) zum Verschieben oder Umbenennen von Dateien und Verzeichnissen. Sie bietet im Vergleich zu traditionellenjava.io.FileKlassen leistungsfähigere und flexiblere Funktionen für Dateioperationen.

Methodensyntax

public static Path move(Path source, Path target, CopyOption... options) throws IOException

Parameterbeschreibung

Parametername Type Beschreibung
source Pfad Der Pfad der zu verschiebenden Quelldatei oder des zu verschiebenden Quellverzeichnisses
target Pfad Der Zielpfad
options CopyOption... Optionale Verschiebeoptionen (Varargs)

Häufige CopyOption

  • StandardCopyOption.REPLACE_EXISTING: Wenn die Zieldatei bereits vorhanden ist, wird sie ersetzt.
  • StandardCopyOption.ATOMIC_MOVE: Stellt sicher, dass der Verschiebevorgang atomar ist.
  • LinkOption.NOFOLLOW_LINKS: Folgt keinen symbolischen Links.

Details zur Methode/Funktion

Grundlegendes Verschieben einer Datei

Die einfachste Verschiebeoperation: Eine Datei von einem Ort an einen anderen verschieben:

Beispiel

Path source = Paths.get("C:/temp/source.txt");
Path target = Paths.get("C:/temp2/target.txt");
Files.move(source, target);

Umbenennen von Dateien

Die move-Methode kann auch zum Umbenennen von Dateien verwendet werden:

Beispiel

Path source = Paths.get("C:/temp/oldname.txt");
Path target = Paths.get("C:/temp/newname.txt");
Files.move(source, target);

Verschieben von Verzeichnissen

Verschieben eines gesamten Verzeichnisses (einschließlich seines Inhalts):

Beispiel

Path sourceDir = Paths.get("C:/temp/mydir");
Path targetDir = Paths.get("C:/temp2/mydir");
Files.move(sourceDir, targetDir);

Erweiterte Nutzung

Vorhandene Dateien überschreiben

VerwendungREPLACE_EXISTINGOption zum Überschreiben einer vorhandenen Zieldatei:

Beispiel

Path source = Paths.get("C:/temp/source.txt");
Path target = Paths.get("C:/temp2/target.txt");
Files.move(source, target, StandardCopyOption.REPLACE_EXISTING);

Atomarer Verschiebevorgang

Stellen Sie sicher, dass der Verschiebevorgang atomar ist (entweder vollständig erfolgreich oder vollständig fehlschlägt):

Beispiel

Path source = Paths.get("C:/temp/source.txt");
Path target = Paths.get("C:/temp2/target.txt");
Files.move(source, target, StandardCopyOption.ATOMIC_MOVE);

Ausnahmebehandlung

move()Die Methode kann die folgenden Ausnahmen auslösen:

  • IOException: Wird ausgelöst, wenn ein E/A-Fehler auftritt.
  • FileAlreadyExistsException: Die Zieldatei ist bereits vorhanden und keineREPLACE_EXISTINGOption angegeben ist.
  • DirectoryNotEmptyException: Es wird versucht, ein nicht leeres Verzeichnis in ein anderes Dateisystem zu verschieben.

Empfohlener Ansatz zur Ausnahmebehandlung:

Beispiel

try {
    Path source = Paths.get("C:/temp/source.txt");
    Path target = Paths.get("C:/temp2/target.txt");
    Files.move(source, target, StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
    System.err.println("Fehler beim Verschieben der Datei: " + e.getMessage());
    e.printStackTrace();
}

Hinweise

  1. Dateisystemübergreifende Verschiebung: Beim Verschieben von Dateien zwischen verschiedenen Dateisystemen handelt es sich tatsächlich um eine Kopier- + Löschoperation.
  2. Symbolische Links: Standardmäßig werden symbolische Links verfolgt, sofern nicht anders angegeben.LinkOption.NOFOLLOW_LINKS
  3. Einschränkungen beim Verschieben von Verzeichnissen: Ein Verzeichnis kann nicht in sich selbst oder in sein Unterverzeichnis verschoben werden.
  4. Dateiattribute: Verschiebevorgänge behalten normalerweise die grundlegenden Attribute der Datei bei.
  5. Leistungsüberlegungen: Das Verschieben innerhalb desselben Dateisystems ist normalerweise viel schneller als das Verschieben über Dateisystemgrenzen hinweg.

Praktische Anwendungsbeispiele

Dateien sicher verschieben

Beispiel

public static boolean safeMoveFile(Path source, Path target) {
    try {
        // Atomare Verschiebung versuchen
        Files.move(source, target, StandardCopyOption.ATOMIC_MOVE);
        return true;
    } catch (AtomicMoveNotSupportedException e) {
        try {
            // Wenn atomare Verschiebung nicht unterstützt wird, normale Verschiebung + Überschreiben verwenden
            Files.move(source, target, StandardCopyOption.REPLACE_EXISTING);
            return true;
        } catch (IOException ex) {
            System.err.println("Datei konnte nicht verschoben werden: " + ex.getMessage());
            return false;
        }
    } catch (IOException e) {
        System.err.println("Datei konnte nicht verschoben werden: " + e.getMessage());
        return false;
    }
}

Stapelweises Verschieben von Dateien

Beispiel

public static void batchMoveFiles(Path sourceDir, Path targetDir, String filePattern)
    throws IOException {
   
    try (DirectoryStream<Path> stream = Files.newDirectoryStream(sourceDir, filePattern)) {
        for (Path sourceFile : stream) {
            Path targetFile = targetDir.resolve(sourceFile.getFileName());
            Files.move(sourceFile, targetFile);
        }
    }
}

Java File Java java.nio.file.Files

Andere Erweiterungen