Dua cara untuk gagal dengan symlink dan kode di atas ... dan tidak tahu solusinya.
Cara # 1
Jalankan ini untuk membuat tes:
echo test > testfile
mkdir dirtodelete
ln -s badlink dirtodelete/badlinktodelete
Di sini Anda melihat file pengujian dan direktori pengujian Anda:
$ ls testfile dirtodelete
testfile
dirtodelete:
linktodelete
Kemudian jalankan deleteDirectory () commons-io Anda. Itu crash mengatakan file tidak ditemukan. Tidak yakin apa yang dilakukan contoh lain di sini. Perintah Linux rm hanya akan menghapus tautan, dan rm -r pada direktori juga akan.
Exception in thread "main" java.io.FileNotFoundException: File does not exist: /tmp/dirtodelete/linktodelete
Cara # 2
Jalankan ini untuk membuat tes:
mkdir testdir
echo test > testdir/testfile
mkdir dirtodelete
ln -s ../testdir dirtodelete/dirlinktodelete
Di sini Anda melihat file pengujian dan direktori pengujian Anda:
$ ls dirtodelete testdir
dirtodelete:
dirlinktodelete
testdir:
testfile
Kemudian jalankan commons-io deleteDirectory () atau kode contoh yang diposkan orang. Itu menghapus tidak hanya direktori, tetapi testfile Anda yang berada di luar direktori sedang dihapus. (Ini menyangkal direktori secara implisit, dan menghapus konten). rm -r hanya akan menghapus tautan. Anda perlu menggunakan sesuatu seperti ini untuk menghapus file-file yang direferensikan: "find -L dirtodelete -type f -exec rm {} \;".
$ ls dirtodelete testdir
ls: cannot access dirtodelete: No such file or directory
testdir: