强制删除文件夹中的所有文件
我一直在使用特定的一段代码从文件夹中删除文件,但它证明是非常有问题的,因为可能我忘记关闭一个或两个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();
}
}
我编辑了代码。此版本的作品。
在提供的代码块中没有InputStream实例。
为了不写大量未经测试的IO代码,请查看apache.commons.io项目。尤其是在FileDeleteStrategy类中,用于文件删除操作。
您的代码可能看起来像:
File fin = new File("C:/ABC Statements final/");
for (File file : fin.listFiles()) {
FileDeleteStrategy.FORCE.delete(file);
}
异常在线程“主”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
如果用'deleteQuietly'替换'delete'方法。在这种情况下,**如果文件无法删除,则不会抛出异常**。 – 2012-07-12 09:56:33
这不是我想摆脱的例外情况,我需要删除文件。 – ErrorNotFoundException 2012-07-12 10:57:31
使用'cleanDirectory()'可能更好,因为它说它不会删除目录。但是,我不是100%确定“干净”的含义。我*假设*这意味着它删除目录内容,但文档是*糟糕*,所以我不能确定。 – Timmmm 2012-11-21 18:25:48
与Apache下议院IO:
File dir = ...
FileUtils.deleteQuietly(dir);
dir.mkdirs();
无需通过这种方式检查异常。
用途:
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'
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();
}
请添加一些文件/说明。 – 2017-12-21 11:54:24
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;
}
我建议简单的答案是否定的。你应该更好地照顾你的流。 – MadProgrammer 2012-07-12 10:20:42
然后我应该说,我已经经历了每一个Inpustream在代码中有我已经关闭了他们的很多但我仍然有同样的错误 – ErrorNotFoundException 2012-07-12 11:36:47
2的想法。有一个,有些地方是保持文件打开和/或有权限问题 – MadProgrammer 2012-07-12 20:08:21