Ein Programm, das wir falsch gemacht haben, als wir versuchten, Dateien von einem Verzeichnis in ein anderes zu verschieben. Nach vielem Debugging habe ich den Fehler gefunden, indem ich ein kleines Dienstprogramm geschrieben habe, das nur eine Datei von einem Verzeichnis in ein anderes verschiebt (Code unten). Es stellt sich heraus, dass das Verschieben von Dateien im lokalen Dateisystem zwar funktioniert, aber der Versuch, eine Datei in ein anderes Dateisystem zu verschieben, schlägt fehl.
Warum ist das? Die Frage könnte plattformspezifisch sein - wir betreiben Linux auf ext3, wenn das wichtig ist.
Und die zweite Frage; Sollte ich etwas anderes als die Methode renameTo()
der Klasse File
verwendet haben? Es scheint, als ob dies nur auf lokalen Dateisystemen funktioniert.
Tests (laufen als root):
%Vor%Code:
%Vor% Aus den Dokumenten von File.renameTo
:
[...] Der Umbenennungsvorgang ist möglicherweise nicht in der Lage, eine Datei von einem Dateisystem in ein anderes zu verschieben [...]
Die offensichtliche Problemumgehung wäre, die Datei "manuell" zu kopieren, indem Sie eine neue Datei öffnen, den Inhalt in die Datei schreiben und die alte Datei löschen.
Sie können auch die % co_de ausprobieren % Methode von Apache Commons.
Javadoc zur Rettung:
Viele Aspekte des Verhaltens dieser Methode sind inhärent plattformabhängig: Der Umbenennungsvorgang ist möglicherweise nicht in der Lage, a zu verschieben Datei von einem Dateisystem zum anderen, es könnte nicht atomar sein, und es möglicherweise nicht erfolgreich, wenn eine Datei mit dem abstrakten Pfadnamen des Ziels vorhanden ist ist bereits vorhanden. Der Rückgabewert sollte immer überprüft werden, um sicherzustellen dass der Umbenennungsvorgang erfolgreich war.
Beachten Sie, dass die Files-Klasse die move-Methode zum Verschieben oder Umbenennen von a definiert Datei in einer plattformunabhängigen Art und Weise.
Aus der Dokumentation:
Benennt die Datei um, die mit diesem abstrakten Pfadnamen gekennzeichnet ist.
Viele Aspekte des Verhaltens dieser Methode sind inhärent plattformabhängig: Der Umbenennungsvorgang ist möglicherweise nicht in der Lage, a zu verschieben Datei von einem Dateisystem zum anderen, es könnte nicht atomar sein, und es möglicherweise nicht erfolgreich, wenn eine Datei mit dem abstrakten Pfadnamen des Ziels vorhanden ist ist bereits vorhanden. Der Rückgabewert sollte immer überprüft werden, um sicherzustellen dass der Umbenennungsvorgang erfolgreich war.
Wenn Sie Dateien zwischen verschiedenen Dateisystemen verschieben möchten, können Sie Apache verwenden: moveFile
Ihr Name ist ein Fehler Beause / some_other_disk / ist relative URL, aber vollständig URL, kann die URL nicht finden Ich habe Beispiel
java FileMover D: \ Eclipse33_workspace_j2ee \ test \ src \ a \ a.txt D: \ Eclipse33_workspace_j2ee \ test \ src Die Dateiverschiebung war erfolgreich.
java FileMover D: \ Eclipse33_workspace_j2ee \ test \ src \ a \ a.txt \ Eclipse33_workspace_j2ee \ test \ src
Die Dateiverschiebung war fehlerhaft.
Ergebnis ist URL ist Fehler
Tags und Links java linux filesystems