2012-07-12 100 views
9

我一直在使用特定的一段代碼從文件夾中刪除文件,但它證明是非常有問題的,因爲可能我忘記關閉一個或兩個InputStream。我擁有的代碼太大了,我無法看到所有沒有關閉的輸入流。有沒有辦法刪除文件是否有打開的InputStream?強制刪除文件夾中的所有文件

這是我一直在使用的那段代碼;

File fin = new File("C:/ABC Statements final/"); 
    File[] finlist = fin.listFiles();  
    for (int n = 0; n < finlist.length; n++) { 
     if (finlist[n].isFile()) { 
     System.gc(); 
     Thread.sleep(2000); 
      finlist[n].delete(); 
     } 
    }   

我編輯了代碼。此版本的作品。

+1

我建議簡單的答案是否定的。你應該更好地照顧你的流。 – MadProgrammer 2012-07-12 10:20:42

+0

然後我應該說,我已經經歷了每一個Inpustream在代碼中有我已經關閉了他們的很多但我仍然有同樣的錯誤 – ErrorNotFoundException 2012-07-12 11:36:47

+0

2的想法。有一個,有些地方是保持文件打開和/或有權限問題 – MadProgrammer 2012-07-12 20:08:21

回答

15

在提供的代碼塊中沒有InputStream實例。

爲了不寫大量未經測試的IO代碼,請查看apache.commons.io項目。尤其是在FileDeleteStrategy類中,用於文件刪除操作。

您的代碼可能看起來像:

File fin = new File("C:/ABC Statements final/"); 

for (File file : fin.listFiles()) { 
    FileDeleteStrategy.FORCE.delete(file); 
} 
+0

異常在線程「主」java.io.IOException:無法刪除文件:C:\ ABC語句final \ Statement0.RPT \t at org .apache.commons.io.FileUtils.forceDelete(FileUtils.java:1390) \t在org.apache.commons.io.FileDeleteStrategy $ ForceFileDeleteStrategy.doDelete(FileDeleteStrategy.java:151) \t在org.apache.commons.io .FileDeleteStrategy.delete(FileDeleteStrategy.java:94) \t at abcbankestatement.ABCBankEStatement.main(ABCBankAstatement。java:502) Java結果:1 – ErrorNotFoundException 2012-07-12 08:21:44

+0

如果用'deleteQuietly'替換'delete'方法。在這種情況下,**如果文件無法刪除,則不會拋出異常**。 – 2012-07-12 09:56:33

+3

這不是我想擺脫的例外情況,我需要刪除文件。 – ErrorNotFoundException 2012-07-12 10:57:31

3

您可以使用:

FileUtils.deleteDirectory(File directory) 

Apache Commons

+3

使用'cleanDirectory()'可能更好,因爲它說它不會刪除目錄。但是,我不是100%確定「乾淨」的含義。我*假設*這意味着它刪除目錄內容,但文檔是*糟糕*,所以我不能確定。 – Timmmm 2012-11-21 18:25:48

1

與Apache下議院IO:

File dir = ... 
FileUtils.deleteQuietly(dir); 
dir.mkdirs(); 

無需通過這種方式檢查異常。

0

用途:

import org.apache.commons.io.FileUtils; 
    FileUtils.cleanDirectory(fin); 

文檔:

/** 
    * Clean a directory without deleting it. 
    * 
    * @param directory directory to clean 
    * @throws IOException in case cleaning is unsuccessful 
    */ 

爲了使用它,你需要一個依賴:

Maven的:

<dependency> 
    <groupId>commons-io</groupId> 
    <artifactId>commons-io</artifactId> 
    <version>2.6</version> 
</dependency> 

搖籃:

compile 'commons-io:commons-io:2.6' 
0
public void removeDir() 
{ 
try 
{ 
    File dir = new File((System.getProperty("user.dir")+"/ReportFolderToMail"+timeStamp)); 
    if (dir.isDirectory()) 
    { 
     File[] files = dir.listFiles(); 
     if (files != null && files.length > 0) 
     { 
      for (File aFile : files) 
      { 
       System.gc(); 
       Thread.sleep(2000); 
       FileDeleteStrategy.FORCE.delete(aFile); 
       System.out.println("delet file" +aFile); 
      } 
     } 
     dir.delete(); 
     System.out.println("delet" +dir); 
    } 
    else 
    { 
     dir.delete(); 
    } 
} 
catch(Exception e) 
{ 
    e.printStackTrace(); 
} 
+1

請添加一些文件/說明。 – 2017-12-21 11:54:24

0
public boolean removeDir() 
{ 
try 
{ 
    //destFile = new File((System.getProperty("user.dir")+"/FileName")) 
    // checks if the directory has any file 
    File dir = destFile; 
    if (dir.isDirectory()) 
    { 
     File[] files = dir.listFiles(); 
     if (files != null && files.length > 0) 
     { 
      for (File aFile : files) 
      { 
       System.gc(); 
       Thread.sleep(2000); 
       FileDeleteStrategy.FORCE.delete(aFile); 
       System.out.println("delet file" +aFile); 
      } 
     } 
     dir.delete(); 
     System.out.println("delet" +dir); 
    } 
    else 
    { 
     dir.delete(); 
    } 
} 
catch(Exception e) 
{ 
    logger.log(LogStatus.FATAL, "Exception Occured While Deleting Folder : " +e); 
} 
return true; 
} 
相關問題