Umbenennen einer Datei ohne renameTo () - Java

8

Abgesehen von meinem letzten Beitrag habe ich die Ursache des Problems gefunden. Ich benutze

%Vor%

wenn b nicht existiert. Der Grund, warum es nicht existiert, ist, weil es eine symbolische Verbindung gibt. Wenn b /usr/name/folder/file ist, dann ist b wirklich /mnt/MountTest , weil der Symlink zu diesem Verzeichnis ist.

Die Frage ist also, gibt es eine alternative Möglichkeit, eine Datei in Java mit einem String-Wert umzubenennen? Wenn nicht, wie kann dieser Umbenennungsvorgang anders durchgeführt werden?

    
Hristo 06.01.2010, 16:50
quelle

5 Antworten

5

Ein Umbenennen würde es umbenennen ... wenn es auf demselben Dateisystem wäre.

Wenn ein renameTo () fehlschlägt, müssen Sie es an den neuen Speicherort kopieren und dann das Original löschen.

    
Dean J 06.01.2010, 17:19
quelle
5

Das Umbenennen von Dateien ist auch über Dateisysteme hinweg sehr problematisch. Siehe Ссылка . Kommentatoren des Fehlerberichts haben einen Beispielcode gepostet und darauf hingewiesen, dass Sie Process.exec verwenden können. Sowohl Apache Commons IO als auch Google Guava verfügen über Dienstprogramme zum sicheren Verschieben von Dateien:

big lep 14.05.2010 16:00
quelle
4

Ich denke, du verwirrst Dinge. Eine java.util.File repräsentiert keine Datei in einem Dateisystem. Es stellt einen Pfad zu einer Datei dar.

    
Trevor Harrison 06.01.2010 17:03
quelle
3

Das Problem ist nicht, dass ein Symlink involviert ist; Das Problem besteht darin, dass Sie die Dateisysteme nicht atomar umbenennen können. Das Meta-Problem besteht darin, dass die Java-Datei-Operationen schlecht entworfen sind und keine richtigen Ausnahmen auslösen und keine Fehlercodes bereitstellen, wenn etwas fehlschlägt!

    
Jonathan Feinberg 06.01.2010 16:52
quelle
1

Wie wäre es mit:

%Vor%     
Poindexter 06.01.2010 16:53
quelle

Tags und Links