java刪除文件時總是返回false,刪不掉的解決方案

java刪除文件時總是返回false,刪不掉

今天寫瞭個簡單的文件刪除的程序:代碼如下:

public static boolean deleteFiles(File[] files){
  boolean flag = false;
  for(File file:files){
   // 路徑為文件且不為空則進行刪除  
      if (file.isFile() && file.exists()) { 
       flag = file.delete();
        System.out.println(flag);
      }
  }
  return flag;
 }

我的文件都是存在的,但是就是經常性的刪不瞭,不知道怎麼回事,我單獨測試的時候是可以的,感覺很是奇怪,上網查,人傢說是可能的情況有:

  • 1、多線程操作
  • 2、打開的文件流沒有關閉
  • 3、需要垃圾回收下

我的解決

分析下我的情況,我的是單線程的,所以第一種情況不存在,第二種情況我關閉我所有打開的文件流但是還是不行,後來我在程序中加瞭行System.gc();,結果就真的可以瞭,一下是修改後的:

public static boolean deleteFiles(File[] files){
  boolean flag = false;
  for(File file:files){
   // 路徑為文件且不為空則進行刪除  
      if (file.isFile() && file.exists()) {  
       System.gc(); //加上確保文件能刪除,不然可能刪不掉
       flag = file.delete();
       System.out.println(flag);
      }
  }
  return flag;
 }

java文件刪除不瞭的坑,特別是壓縮文件

我們在用java刪除文件的時候通常直接調用file.delete();方法就行瞭,但是很多情況下卻刪除不瞭

下面列舉一些情況

  • 1、是文件夾且不為空,這個沒什麼好說的,可以先刪除文件夾裡的文件再刪除這個文件夾
  • 2、被別的進程占用,這不僅java不能刪,就算windows手動刪也刪不瞭
  • 3、跟這個文件的流沒有關閉,這個是最常見的原因瞭

然而我遇到的是上傳一個文件,然後跟這個文件有關的流也關閉瞭,還是刪除不瞭,後來發現有人把這個文件偷偷的轉換成zip壓縮文件瞭。

然後刪除這個bookFile死活刪除不瞭,如果出現這種情況,這個zipFile最後一定要close;

java.util.zip.ZipFile.close()方法關閉ZIP文件

關閉此ZIP文件將關閉以前由調用getInputStream()方法返回的所有輸入流。這個方法連流都給我們關閉瞭!就不用我們手動關閉zip文件的流瞭,最後在調用file.delete()方法就可以刪除文件瞭

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: