java刪除文件時總是返回false,刪不掉的解決方案
java刪除文件時總是返回false,刪不掉
今天寫了個簡單的文件刪除的程序:代碼如下:
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)常性的刪不了,不知道怎么回事,我單獨測試的時候是可以的,感覺很是奇怪,上網(wǎng)查,人家說是可能的情況有:
- 1、多線程操作
- 2、打開的文件流沒有關(guān)閉
- 3、需要垃圾回收下
我的解決
分析下我的情況,我的是單線程的,所以第一種情況不存在,第二種情況我關(guān)閉我所有打開的文件流但是還是不行,后來我在程序中加了行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文件刪除不了的坑,特別是壓縮文件
我們在用java刪除文件的時候通常直接調(diào)用file.delete();方法就行了,但是很多情況下卻刪除不了
下面列舉一些情況
- 1、是文件夾且不為空,這個沒什么好說的,可以先刪除文件夾里的文件再刪除這個文件夾
- 2、被別的進(jìn)程占用,這不僅java不能刪,就算windows手動刪也刪不了
- 3、跟這個文件的流沒有關(guān)閉,這個是最常見的原因了
然而我遇到的是上傳一個文件,然后跟這個文件有關(guān)的流也關(guān)閉了,還是刪除不了,后來發(fā)現(xiàn)有人把這個文件偷偷的轉(zhuǎn)換成zip壓縮文件了。
然后刪除這個bookFile死活刪除不了,如果出現(xiàn)這種情況,這個zipFile最后一定要close;
java.util.zip.ZipFile.close()方法關(guān)閉ZIP文件
關(guān)閉此ZIP文件將關(guān)閉以前由調(diào)用getInputStream()方法返回的所有輸入流。這個方法連流都給我們關(guān)閉了!就不用我們手動關(guān)閉zip文件的流了,最后在調(diào)用file.delete()方法就可以刪除文件了
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot 中異步任務(wù),定時任務(wù),郵件任務(wù)詳解
這篇文章主要介紹了springboot 與異步任務(wù),定時任務(wù),郵件任務(wù),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-09-09關(guān)于Java中finalize析構(gòu)方法的作用詳解
構(gòu)造方法用于創(chuàng)建和初始化類對象,也就是說,構(gòu)造方法負(fù)責(zé)”生出“一個類對象,并可以在對象出生時進(jìn)行必要的操作,在這篇文章中會給大家簡單介紹一下析構(gòu)方法,需要的朋友可以參考下2023-05-05Spring Cloud Gateway 內(nèi)存溢出的解決方案
這篇文章主要介紹了Spring Cloud Gateway 內(nèi)存溢出的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07Maven中exec插件執(zhí)行Java程序的實現(xiàn)
在Maven項目中,可以使用Maven的插件來執(zhí)行Java程序,本文主要介紹了Maven中exec插件執(zhí)行Java程序的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2023-12-12Java導(dǎo)入新項目報錯java:JDK?isn‘t?specified?for?module解決辦法
這篇文章主要給大家介紹了關(guān)于Java導(dǎo)入新項目報錯java:JDK?isn‘t?specified?for?module的解決辦法,當(dāng)您在導(dǎo)入Java項目時遇到錯誤時,可以嘗試以下面的方法來處理,需要的朋友可以參考下2024-05-05如何開啟控制臺輸出mybatis執(zhí)行的sql日志問題
這篇文章主要介紹了如何開啟控制臺輸出mybatis執(zhí)行的sql日志問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09SpringBoot中Zookeeper分布式鎖的原理和用法詳解
Zookeeper是一個分布式協(xié)調(diào)服務(wù),它提供了高可用、高性能、可擴展的分布式鎖機制,SpringBoot是一個基于Spring框架的開發(fā)框架,它提供了對Zookeeper分布式鎖的集成支持,本文將介紹SpringBoot中的 Zookeeper分布式鎖的原理和使用方法,需要的朋友可以參考下2023-07-07