Hai cách để thất bại với symlink và đoạn mã trên ... và không biết giải pháp.
Cách 1
Chạy này để tạo một bài kiểm tra:
echo test > testfile
mkdir dirtodelete
ln -s badlink dirtodelete/badlinktodelete
Tại đây bạn thấy tập tin kiểm tra và thư mục kiểm tra của bạn:
$ ls testfile dirtodelete
testfile
dirtodelete:
linktodelete
Sau đó chạy commons-io của bạn xóaDirectory (). Nó gặp sự cố nói rằng tập tin không được tìm thấy. Không chắc chắn những gì các ví dụ khác làm ở đây. Lệnh rm Linux chỉ đơn giản là xóa liên kết và rm -r trên thư mục cũng vậy.
Exception in thread "main" java.io.FileNotFoundException: File does not exist: /tmp/dirtodelete/linktodelete
Cách # 2
Chạy này để tạo một bài kiểm tra:
mkdir testdir
echo test > testdir/testfile
mkdir dirtodelete
ln -s ../testdir dirtodelete/dirlinktodelete
Tại đây bạn thấy tập tin kiểm tra và thư mục kiểm tra của bạn:
$ ls dirtodelete testdir
dirtodelete:
dirlinktodelete
testdir:
testfile
Sau đó chạy commons-io xóaDirectory () hoặc mã ví dụ mà mọi người đã đăng. Nó xóa không chỉ thư mục, mà testfile của bạn nằm ngoài thư mục đang bị xóa. (Nó hủy bỏ thư mục ngầm và xóa nội dung). rm -r sẽ chỉ xóa liên kết. Bạn cần sử dụng một cái gì đó như thế này để xóa các tệp bị hủy đăng ký: "find -L Dirtodelete -type f -exec rm {} \;".
$ ls dirtodelete testdir
ls: cannot access dirtodelete: No such file or directory
testdir: