Java java.nio.file.Files move()-Methode
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
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 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 target = Paths.get("C:/temp/newname.txt");
Files.move(source, target);
Verschieben von Verzeichnissen
Verschieben eines gesamten Verzeichnisses (einschließlich seines Inhalts):
Beispiel
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 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 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
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
- Dateisystemübergreifende Verschiebung: Beim Verschieben von Dateien zwischen verschiedenen Dateisystemen handelt es sich tatsächlich um eine Kopier- + Löschoperation.
- Symbolische Links: Standardmäßig werden symbolische Links verfolgt, sofern nicht anders angegeben.
LinkOption.NOFOLLOW_LINKS - Einschränkungen beim Verschieben von Verzeichnissen: Ein Verzeichnis kann nicht in sich selbst oder in sein Unterverzeichnis verschoben werden.
- Dateiattribute: Verschiebevorgänge behalten normalerweise die grundlegenden Attribute der Datei bei.
- Leistungsüberlegungen: Das Verschieben innerhalb desselben Dateisystems ist normalerweise viel schneller als das Verschieben über Dateisystemgrenzen hinweg.
Praktische Anwendungsbeispiele
Dateien sicher verschieben
Beispiel
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
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 java.nio.file.Files