4 Stimmen

Was ist der richtige Weg, um eine Datei in Java umzubenennen?

Was ich unter 'richtiger' Dateiumbenennung verstehe:

  1. Es sollte auf verschiedenen Plattformen funktionieren.

  2. Es sollte auf irgendeine Weise mit Fällen umgehen, wenn:

    1. die Datei gesperrt ist
    2. eine Datei mit dem 'neuen' Namen bereits vorhanden ist
    3. nicht genügend freier Speicherplatz auf der Festplatte vorhanden ist, um den Vorgang abzuschließen.

Gibt es übliche Lösungen/Bibliotheken/Strategien?

2voto

carlspring Punkte 29121

Wie im Javadoc beschrieben:

Benennt die Datei, die durch diesen abstrakten Dateipfad dargestellt wird, um. Viele Aspekte des Verhaltens dieser Methode sind grundsätzlich plattformabhängig: Die Umbenennungsoperation kann eine Datei möglicherweise nicht von einem Dateisystem auf ein anderes verschieben, sie ist möglicherweise nicht atomar und sie kann fehlschlagen, wenn bereits eine Datei mit dem Ziel-Dateipfad vorhanden ist. Der Rückgabewert sollte immer überprüft werden, um sicherzustellen, dass die Umbenennungsoperation erfolgreich war.

Hier ist ein Beispiel:

// Die Datei (oder Verzeichnis) mit dem alten Namen
File oldFile = new File("old.txt");

// Die Datei (oder das Verzeichnis) mit dem neuen Namen
File newFile = new File("new.txt");

// Datei (oder Verzeichnis) umbenennen
boolean success = oldFile.renameTo(newFile);
if (!success) {
    // Datei wurde nicht erfolgreich umbenannt
}

Mein Rat wäre, das success boolean zu überprüfen und den in der API definierten Standardansatz zu verwenden.

1voto

BegemoT Punkte 3718

Die Google Guava-Bibliothek enthält die Files.move(..) Methode, die einige Ihrer Anforderungen bestätigt - tatsächlich versucht sie, eine Datei mit File.renameTo() zu verschieben und, falls dies fehlschlägt, die Kopier-und-Quellstrategie zu verwenden.

Ich kenne keine Bibliotheken, die den freien Speicherplatz überprüfen, da sich der freie Speicherplatz während des Verschiebens/Kopierens ändern kann, und der einzige Weg, niedrigen Speicherplatz konsistent zu verarbeiten, besteht darin, dass die Kopier-/Verschiebemethode einen speziellen Fehlercode/Ausnahme zurückgibt, der auf den Grund des Fehlers hinweist - den die aktuelle Java File-API nicht hat...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X