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、多線(xiàn)程操作
- 2、打開(kāi)的文件流沒(méi)有關(guān)閉
- 3、需要垃圾回收下
我的解決
分析下我的情況,我的是單線(xiàn)程的,所以第一種情況不存在,第二種情況我關(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)文章
springboot 中異步任務(wù),定時(shí)任務(wù),郵件任務(wù)詳解
這篇文章主要介紹了springboot 與異步任務(wù),定時(shí)任務(wù),郵件任務(wù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09關(guān)于Java中finalize析構(gòu)方法的作用詳解
構(gòu)造方法用于創(chuàng)建和初始化類(lèi)對(duì)象,也就是說(shuō),構(gòu)造方法負(fù)責(zé)”生出“一個(gè)類(lèi)對(duì)象,并可以在對(duì)象出生時(shí)進(jìn)行必要的操作,在這篇文章中會(huì)給大家簡(jiǎn)單介紹一下析構(gòu)方法,需要的朋友可以參考下2023-05-05Spring Cloud Gateway 內(nèi)存溢出的解決方案
這篇文章主要介紹了Spring Cloud Gateway 內(nèi)存溢出的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07Maven中exec插件執(zhí)行Java程序的實(shí)現(xiàn)
在Maven項(xiàng)目中,可以使用Maven的插件來(lái)執(zhí)行Java程序,本文主要介紹了Maven中exec插件執(zhí)行Java程序的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12Java導(dǎo)入新項(xiàng)目報(bào)錯(cuò)java:JDK?isn‘t?specified?for?module解決辦法
這篇文章主要給大家介紹了關(guān)于Java導(dǎo)入新項(xiàng)目報(bào)錯(cuò)java:JDK?isn‘t?specified?for?module的解決辦法,當(dāng)您在導(dǎo)入Java項(xiàng)目時(shí)遇到錯(cuò)誤時(shí),可以嘗試以下面的方法來(lái)處理,需要的朋友可以參考下2024-05-05如何開(kāi)啟控制臺(tái)輸出mybatis執(zhí)行的sql日志問(wèn)題
這篇文章主要介紹了如何開(kāi)啟控制臺(tái)輸出mybatis執(zhí)行的sql日志問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09SpringBoot中Zookeeper分布式鎖的原理和用法詳解
Zookeeper是一個(gè)分布式協(xié)調(diào)服務(wù),它提供了高可用、高性能、可擴(kuò)展的分布式鎖機(jī)制,SpringBoot是一個(gè)基于Spring框架的開(kāi)發(fā)框架,它提供了對(duì)Zookeeper分布式鎖的集成支持,本文將介紹SpringBoot中的 Zookeeper分布式鎖的原理和使用方法,需要的朋友可以參考下2023-07-07