java寫入zip文件后無法進(jìn)行刪除的問題及解決
java寫入zip文件后無法進(jìn)行刪除
今天做一個(gè)上傳zip進(jìn)行解壓寫入服務(wù)器,發(fā)現(xiàn)寫入后無法對(duì)上傳的ZIP進(jìn)行刪除,即使手動(dòng)刪除也不可以??偸翘崾颈籮ava 的jvm占用。
首先懷疑的是某個(gè)流沒有關(guān)閉,但是仔細(xì)檢查還是什么都關(guān)閉了,順序也是正確的。
后來想想既然jvm占用可不可以提示一下讓他回收內(nèi)存呢。
加入 System.gc(); 方法后果然 zip文件可以刪除了,完美解決。
java文件刪除不了的坑,特別是壓縮文件
我們?cè)谟胘ava刪除文件的時(shí)候通常直接調(diào)用file.delete();方法就行了,但是很多情況下卻刪除不了,
下面列舉一些情況
- 1.是文件夾且不為空,這個(gè)沒什么好說的,可以先刪除文件夾里的文件再刪除這個(gè)文件夾;
- 2.被別的進(jìn)程占用,這不僅java不能刪,就算windows手動(dòng)刪也刪不了;
- 3.跟這個(gè)文件的流沒有關(guān)閉,這個(gè)是最常見的原因了
然而我遇到的是上傳一個(gè)文件,然后跟這個(gè)文件有關(guān)的流也關(guān)閉了,還是刪除不了,后來發(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()方法就可以刪除文件了
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring實(shí)現(xiàn)加法計(jì)算器和用戶登錄功能
在前后端分離的Web開發(fā)模式中,接口(API)扮演著至關(guān)重要的角色,它是前后端交互的橋梁,創(chuàng)建加法計(jì)算器和用戶登錄功能時(shí),介紹了接口測(cè)試和問題解決的一般流程,如使用Postman測(cè)試接口、查看日志、處理緩存問題等,確保開發(fā)過程中的高效協(xié)作和問題快速定位2024-10-10Java實(shí)現(xiàn)byte[]轉(zhuǎn)List的示例代碼
byte,即字節(jié),由8位的二進(jìn)制組成。在Java中,byte類型的數(shù)據(jù)是8位帶符號(hào)的二進(jìn)制數(shù)。List?是一個(gè)接口,它繼承于Collection的接口。它代表著有序的隊(duì)列。本文將介紹如何通過java實(shí)現(xiàn)byte[]轉(zhuǎn)List,需要的可以參考一下2022-01-01Java數(shù)據(jù)結(jié)構(gòu)之堆(優(yōu)先隊(duì)列)的實(shí)現(xiàn)
堆(優(yōu)先隊(duì)列)是一種典型的數(shù)據(jù)結(jié)構(gòu),其形狀是一棵完全二叉樹,一般用于求解topk問題。本文將利用Java語言實(shí)現(xiàn)堆,感興趣的可以學(xué)習(xí)一下2022-05-05詳解Mybatis攔截器安全加解密MySQL數(shù)據(jù)實(shí)戰(zhàn)
本文主要介紹了Mybatis攔截器安全加解密MySQL數(shù)據(jù)實(shí)戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01SpringMVC MVC架構(gòu)原理及實(shí)現(xiàn)方法詳解
這篇文章主要介紹了SpringMVC MVC架構(gòu)原理及實(shí)現(xiàn)方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09