Zwei Möglichkeiten, mit Symlinks und dem obigen Code zu scheitern... und ich kenne die Lösung nicht.
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 meldet, dass die Datei nicht gefunden wurde. Ich bin mir nicht sicher, was die anderen Beispiele hier tun. Der Linux-Befehl rm würde einfach den Link löschen, und rm -r für das Verzeichnis würde das auch tun.
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 Beispielcode aus, den andere gepostet haben. Es löscht nicht nur das Verzeichnis, sondern auch Ihre Testdatei, die sich außerhalb des zu löschenden Verzeichnisses befindet. (Es dereferenziert das Verzeichnis implizit und löscht den Inhalt). rm -r würde nur den Link löschen. Sie müssen etwas wie dieses verwenden, um die dereferenzierten Dateien zu löschen: "find -L dirtodelete -type f -exec rm {} \;".
$ ls dirtodelete testdir
ls: cannot access dirtodelete: No such file or directory
testdir: