2012-06-22 35 views
9

Tôi đã tự hỏi liệu có thể xóa thư mục khi ứng dụng đã bị đóng không?Xóa thư mục khi thoát trong Java

Có cách nào dễ dàng để thực hiện điều gì đó khi ứng dụng được đóng không?

Hiện tại ứng dụng của tôi tải xuống tệp lớp lúc chạy nên những gì tôi thực sự đang tìm kiếm là điều gì đó để xóa chúng khỏi hệ thống khách hàng.

tôi đã cố gắng cho đến nay

File directory = new File("macros/bin/"); 
directory.deleteOnExit(); 

Cũng như một xóa trên thời gian chạy của các tập tin khởi động tải về (mà rõ ràng là không thể được thực hiện khi nhìn thấy như nó cần họ để chạy).

+0

Nếu các tệp lớp này được tải trong JVM thì MS Windows có thể sẽ không cho phép bạn xóa chúng –

Trả lời

19

Bạn có thể thử này:

Runtime.getRuntime().addShutdownHook(new Thread() { 

     @Override 
     public void run() { 
     /* Delete your file here. */ 
     } 
}); 

Rất nhiều phụ thuộc vào cách chương trình của bạn được kết thúc.

+1

trên hầu hết các hệ thống móc tắt chạy trên mọi trường hợp nhưng 'kill -9'. –

+0

cảm ơn rằng đã làm việc một điều trị – Arrin

+0

Bạn có lẽ nên đóng góp nó vào Apache commons-io kể từ khi tôi nghĩ rằng thực hiện của bạn tốt hơn phản ánh nhu cầu thực tế. Việc thực hiện commons-io hiện tại là đăng ký các tệp nằm trong thư mục tại thời điểm cuộc gọi thay vì ở cuối khi tất cả quá trình xử lý được hoàn thành. –

8

Chỉ để ghi lại, javadoc nói rằng directory.deleteOnExit() sẽ hoạt động ... phương pháp được cho là hoạt động cho các thư mục. Tuy nhiên, phương pháp tiếp cận có thể không thành công vì thư mục không trống tại thời điểm nó cố xóa nó ... và hệ điều hành thường sẽ không cho phép bạn xóa thư mục không trống.

Giải pháp sẽ là gọi số deleteOnExit() cho các tệp mà người dùng tải xuống. Bạn phải thực hiện việc này sau cuộc gọi directory.deleteOnExit(). Xem javadoc vì sao.

Có nói rằng, móc tắt rõ ràng là một cách tiếp cận mạnh mẽ hơn.

3

Bạn nên làm như sau sử dụng Apache Commons IO:

Runtime.getRuntime().addShutdownHook(new Thread(() -> FileUtils.deleteQuietly(fileOrDir))); 

Lưu ý: việc thực hiện FileUtils.forceDeleteOnExit là thiếu sót: nó ghi file để xóa trong đăng ký của thư mục, do đó nếu các tập tin được thêm vào sau đó nó sẽ không xóa thư mục.

0

Bạn có thể sử dụng này: org.apache.commons.io.FileUtils.forceDeleteOnExit(File)

/* 
* Schedules a file to be deleted when JVM exits. 
* If file is directory delete it and all sub-directories. 
*/ 
FileUtils.forceDeleteOnExit(File) 

Hạn chế:
Thật không may này chỉ hoạt động nếu NO tập tin và/hoặc thư mục được tạo ra bên trong thư mục sau forceDeleteOnExit được gọi.