java如何強制刪除java程序占用的文件
java強制刪除java程序占用的文件
在JAVA對文件的讀寫操作中,操作完以后將輸入流和輸出流及時關(guān)閉時很必要的。
假如我們有時候忘記關(guān)閉了,又不知道在哪個地方去關(guān)閉,為了刪除該文件,JAVA可以進(jìn)行強制刪除操作。
可以使用如下代碼進(jìn)行強制刪除:
public boolean forceDelete(File file){ boolean result=file.delete(); if (!result) { System.gc(); //回收資源 file.delete(); } return result; }
如果一次強制回收不成功,那就搞個循環(huán),多來幾次,如下代碼:
public boolean forceDelete(File file) { boolean result = file.delete(); int tryCount = 0; while (!result && tryCount++ < 10) { System.gc(); //回收資源 result = file.delete(); } return result; }
雖然System.gc()可以這樣強制解除對文件的占用,但是也不是萬能的,因為:
- ① 及時關(guān)閉輸入流、輸出流是很有必要的
- ② System.gc()也不是一定能夠回收垃圾的,能否成功回收取決于JVM的回收機制,外部人員是無法掌控的。就像我們?nèi)コ燥埖葧r間長了催單,我們只是向餐館提交了我們的申請,能不能快點上菜依然取決于廚師
- ③ 即使不用System.gc()進(jìn)行強制回收,JVM的回收機制也會在一段時間后對資源進(jìn)行回收
- ④ 這種方法也只對被java程序占用的文件有用,對于被其他進(jìn)行占用的文件就無能為力了
java強行刪除文件(針對進(jìn)程正在使用的文件的刪除)
操作無法完成 因為文件已在 Java(TM) Platform SE binary 中打開。
出現(xiàn)該問題的原因是創(chuàng)建的IO流沒有正常的關(guān)閉,導(dǎo)致資源文件一直被占用!
只要為創(chuàng)建的每一個IO流加上close方法就能正常使用,而且謹(jǐn)記:先創(chuàng)建的流最后關(guān)閉,且創(chuàng)建關(guān)閉一一對應(yīng)。
刪除被進(jìn)程占用的文件,可以先判斷文件是否被刪除,如果沒有,則讓系統(tǒng)強制回收資源,進(jìn)行文件的刪除
示例如下:
boolean result = f.delete(); if(!result) { System.gc(); f.delete; }
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot項目中使用@Scheduled讀取動態(tài)參數(shù)
這篇文章主要介紹了SpringBoot項目中使用@Scheduled讀取動態(tài)參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11關(guān)于Spring?Cache?緩存攔截器(?CacheInterceptor)
這篇文章主要介紹了關(guān)于Spring?Cache緩存攔截器(?CacheInterceptor),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12java網(wǎng)絡(luò)編程之識別示例 獲取主機網(wǎng)絡(luò)接口列表
一個客戶端想要發(fā)起一次通信,先決條件就是需要知道運行著服務(wù)器端程序的主機的IP地址是多少。然后我們才能夠通過這個地址向服務(wù)器發(fā)送信息。2014-01-01MybatisPlus如何自定義TypeHandler映射JSON類型為List
這篇文章主要介紹了MybatisPlus如何自定義TypeHandler映射JSON類型為List,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01