Zwei Möglichkeiten, mit Symlinks und dem obigen Code zu scheitern ... und die Lösung nicht zu kennen.
Weg # 1
Führen Sie dies aus, um einen Test zu erstellen:
echo test > testfile
mkdir dirtodelete
ln -s badlink dirtodelete/badlinktodelete
Hier sehen Sie Ihre Testdatei und Ihr Testverzeichnis:
$ ls testfile dirtodelete
testfile
dirtodelete:
linktodelete
Führen Sie dann Ihr commons-io deleteDirectory () aus. Es stürzt ab und die Datei wird nicht gefunden. Ich bin mir nicht sicher, was die anderen Beispiele hier tun. Der Linux-Befehl rm löscht einfach den Link und rm -r im Verzeichnis auch.
Exception in thread "main" java.io.FileNotFoundException: File does not exist: /tmp/dirtodelete/linktodelete
Weg # 2
Führen Sie dies aus, um einen Test zu erstellen:
mkdir testdir
echo test > testdir/testfile
mkdir dirtodelete
ln -s ../testdir dirtodelete/dirlinktodelete
Hier sehen Sie Ihre Testdatei und Ihr Testverzeichnis:
$ ls dirtodelete testdir
dirtodelete:
dirlinktodelete
testdir:
testfile
Führen Sie dann Ihr commons-io deleteDirectory () oder den von Personen geposteten Beispielcode aus. Es löscht nicht nur das Verzeichnis, sondern auch Ihre Testdatei, die sich außerhalb des zu löschenden Verzeichnisses befindet. (Das Verzeichnis wird implizit dereferenziert und der Inhalt gelöscht.) rm -r würde nur den Link löschen. Sie müssen so etwas verwenden, um die dereferenzierten Dateien zu löschen: "find -L mudodelete -type f -exec rm {} \;".
$ ls dirtodelete testdir
ls: cannot access dirtodelete: No such file or directory
testdir: