java刪除文件時(shí)總是返回false,刪不掉的解決方案
java刪除文件時(shí)總是返回false,刪不掉
今天寫(xiě)了個(gè)簡(jiǎn)單的文件刪除的程序:代碼如下:
public static boolean deleteFiles(File[] files){
boolean flag = false;
for(File file:files){
// 路徑為文件且不為空則進(jìn)行刪除
if (file.isFile() && file.exists()) {
flag = file.delete();
System.out.println(flag);
}
}
return flag;
}
我的文件都是存在的,但是就是經(jīng)常性的刪不了,不知道怎么回事,我單獨(dú)測(cè)試的時(shí)候是可以的,感覺(jué)很是奇怪,上網(wǎng)查,人家說(shuō)是可能的情況有:
- 1、多線程操作
- 2、打開(kāi)的文件流沒(méi)有關(guān)閉
- 3、需要垃圾回收下
我的解決
分析下我的情況,我的是單線程的,所以第一種情況不存在,第二種情況我關(guān)閉我所有打開(kāi)的文件流但是還是不行,后來(lái)我在程序中加了行System.gc();,結(jié)果就真的可以了,一下是修改后的:
public static boolean deleteFiles(File[] files){
boolean flag = false;
for(File file:files){
// 路徑為文件且不為空則進(jìn)行刪除
if (file.isFile() && file.exists()) {
System.gc(); //加上確保文件能刪除,不然可能刪不掉
flag = file.delete();
System.out.println(flag);
}
}
return flag;
}
java文件刪除不了的坑,特別是壓縮文件
我們?cè)谟胘ava刪除文件的時(shí)候通常直接調(diào)用file.delete();方法就行了,但是很多情況下卻刪除不了
下面列舉一些情況
- 1、是文件夾且不為空,這個(gè)沒(méi)什么好說(shuō)的,可以先刪除文件夾里的文件再刪除這個(gè)文件夾
- 2、被別的進(jìn)程占用,這不僅java不能刪,就算windows手動(dòng)刪也刪不了
- 3、跟這個(gè)文件的流沒(méi)有關(guān)閉,這個(gè)是最常見(jiàn)的原因了
然而我遇到的是上傳一個(gè)文件,然后跟這個(gè)文件有關(guān)的流也關(guān)閉了,還是刪除不了,后來(lái)發(fā)現(xiàn)有人把這個(gè)文件偷偷的轉(zhuǎn)換成zip壓縮文件了。

然后刪除這個(gè)bookFile死活刪除不了,如果出現(xiàn)這種情況,這個(gè)zipFile最后一定要close;

java.util.zip.ZipFile.close()方法關(guān)閉ZIP文件
關(guān)閉此ZIP文件將關(guān)閉以前由調(diào)用getInputStream()方法返回的所有輸入流。這個(gè)方法連流都給我們關(guān)閉了!就不用我們手動(dòng)關(guān)閉zip文件的流了,最后在調(diào)用file.delete()方法就可以刪除文件了
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
spring-shiro權(quán)限控制realm實(shí)戰(zhàn)教程
這篇文章主要介紹了spring-shiro權(quán)限控制realm實(shí)戰(zhàn)教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
SpringSecurity獲取當(dāng)前登錄用戶的信息的幾種方法實(shí)現(xiàn)
本文主要介紹了SpringSecurity中獲取當(dāng)前登錄用戶信息的多種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03
SpringBoot內(nèi)部調(diào)用事務(wù)不起作用問(wèn)題的解決方案
這篇文章主要介紹了SpringBoot事務(wù)不起作用問(wèn)題的解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
Java實(shí)現(xiàn)十進(jìn)制與二進(jìn)制互轉(zhuǎn)的示例詳解
這篇文章主要為大家詳細(xì)介紹了Java如何實(shí)現(xiàn)十進(jìn)制與二進(jìn)制的互轉(zhuǎn),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定幫助,需要的可以參考一下2022-11-11
EL表達(dá)式的隱式對(duì)象_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了EL表達(dá)式的隱式對(duì)象,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07
Spring JdbcTemplate整合使用方法及原理詳解
這篇文章主要介紹了Spring JdbcTemplate整合使用方法及原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
springcloud gateway聚合swagger2的方法示例
這篇文章主要介紹了springcloud gateway聚合swagger2的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04

