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?
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:
Ich denke, du verwirrst Dinge. Eine java.util.File repräsentiert keine Datei in einem Dateisystem. Es stellt einen Pfad zu einer Datei dar.
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!