2012-07-12 102 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; 
} 
相关问题