Deux façons d'échouer avec les liens symboliques et le code ci-dessus ... et je ne connais pas la solution.
Voie # 1
Exécutez ceci pour créer un test:
echo test > testfile
mkdir dirtodelete
ln -s badlink dirtodelete/badlinktodelete
Ici, vous voyez votre fichier de test et votre répertoire de test:
$ ls testfile dirtodelete
testfile
dirtodelete:
linktodelete
Exécutez ensuite votre commons-io deleteDirectory (). Il se bloque en disant que le fichier est introuvable. Je ne sais pas ce que font les autres exemples ici. La commande Linux rm supprimerait simplement le lien, et rm -r sur le répertoire le ferait également.
Exception in thread "main" java.io.FileNotFoundException: File does not exist: /tmp/dirtodelete/linktodelete
Voie # 2
Exécutez ceci pour créer un test:
mkdir testdir
echo test > testdir/testfile
mkdir dirtodelete
ln -s ../testdir dirtodelete/dirlinktodelete
Ici, vous voyez votre fichier de test et votre répertoire de test:
$ ls dirtodelete testdir
dirtodelete:
dirlinktodelete
testdir:
testfile
Ensuite, exécutez votre commons-io deleteDirectory () ou l'exemple de code que les gens ont publié. Il supprime non seulement le répertoire, mais votre fichier de test qui se trouve en dehors du répertoire en cours de suppression. (Il déréférence implicitement le répertoire et supprime le contenu). rm -r supprimerait uniquement le lien. Vous devez utiliser quelque chose comme ceci, supprimez les fichiers déréférencés: "find -L dirtodelete -type f -exec rm {} \;".
$ ls dirtodelete testdir
ls: cannot access dirtodelete: No such file or directory
testdir: