Duas maneiras de falhar com links simbólicos e o código acima ... e não sabemos a solução.
Caminho # 1
Execute isto para criar um teste:
echo test > testfile
mkdir dirtodelete
ln -s badlink dirtodelete/badlinktodelete
Aqui você vê seu arquivo de teste e diretório de teste:
$ ls testfile dirtodelete
testfile
dirtodelete:
linktodelete
Em seguida, execute seu commons-io deleteDirectory (). Falha dizendo que o arquivo não foi encontrado. Não tenho certeza do que os outros exemplos fazem aqui. O comando rm do Linux simplesmente excluiria o link e rm -r no diretório também.
Exception in thread "main" java.io.FileNotFoundException: File does not exist: /tmp/dirtodelete/linktodelete
Caminho # 2
Execute isto para criar um teste:
mkdir testdir
echo test > testdir/testfile
mkdir dirtodelete
ln -s ../testdir dirtodelete/dirlinktodelete
Aqui você vê seu arquivo de teste e diretório de teste:
$ ls dirtodelete testdir
dirtodelete:
dirlinktodelete
testdir:
testfile
Em seguida, execute o commons-io deleteDirectory () ou o código de exemplo que as pessoas postaram. Exclui não apenas o diretório, mas seu arquivo de teste que está fora do diretório sendo excluído. (Desreferencia o diretório implicitamente e exclui o conteúdo). rm -r excluiria apenas o link. Você precisa usar algo como isso para excluir os arquivos referenciados: "find -L dirtodelete -type f -exec rm {} \;".
$ ls dirtodelete testdir
ls: cannot access dirtodelete: No such file or directory
testdir: