2013-05-14 29 views
6

Làm thế nào tôi có thể kiểm tra rằng tôi có thể xóa tệp bằng Java?Làm cách nào để kiểm tra xem tôi có thể xóa tệp không?

Ví dụ, tôi nên có thể xóa tập tin C:/file.txt nhưng tôi không bao giờ sẽ có thể xóa một Solution C:/ hoặc Computer, hoặc My Documents, vv

được mô tả trong possible duplicate không làm việc cho tôi.

+0

* "Giải pháp được mô tả trong thể trùng lặp không làm việc cho tôi. "* Xin giải thích tại sao? –

+0

@Marco Forberg Đôi khi nó ném một ngoại lệ 'Truy cập bị từ chối 'đối với các tệp thông thường như' C:/file.txt'. – SeniorJD

Trả lời

10

Xóa tệp yêu cầu quyền ghi của phụ huynh của tệp, tức là thư mục chứa tệp. Thư mục trong java cũng được thể hiện bằng cá thể của lớp java.io.File có phương thức canWrite().

Vì vậy, để kiểm tra xem tệp có thể bị xóa hay không, bạn nên gọi file.getParent().canWrite().

+0

Nó hoạt động cho tôi, cảm ơn! – SeniorJD

+0

Tất cả các khoản tín dụng cho đồng nghiệp của tôi @ arn0n – AlexR

+3

1 giải pháp tuyệt vời nhưng nó thực sự là 'file.getParentFile(). CanWrite()'. –

3

Trên Windows 7 64 hộp chút tôi sử dụng NTFS và Java 7 (Oracle JDK), điều duy nhất mà làm việc cho tôi cách đáng tin cậy là

boolean canDelete = file.renameTo(file) 

Đây là đáng ngạc nhiên đơn giản và cũng làm việc cho các thư mục, trong đó có " ở đâu đó bên dưới tệp "an" mở "hoặc" bị khóa ".

Những điều khác tôi đã cố gắng và tạo ra tính giả tích cực:. Aquire một FileLock, File # canWrite, File # setLastModified ("chạm"), file.getParent() canWrite()

+0

Cần lưu ý rằng hành vi của chức năng này phụ thuộc vào nền tảng. – colti