我一直在使用特定的代码来删除文件夹中的文件,但事实证明这是非常有问题的,因为我可能忘了关闭一两个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();
}
}
我编辑了代码。这个版本有效。
答案 0 :(得分:18)
提供的代码块中没有InputStream实例。
要不编写大量未经测试的IO代码,请查看apache.commons.io项目。特别是在FileDeleteStrategy类,用于文件删除操作。
您的代码可能如下所示:
File fin = new File("C:/ABC Statements final/");
for (File file : fin.listFiles()) {
FileDeleteStrategy.FORCE.delete(file);
}
答案 1 :(得分:4)
答案 2 :(得分:3)
使用Apache Commons IO:
File dir = ...
FileUtils.deleteQuietly(dir);
dir.mkdirs();
无需以这种方式检查例外情况。
答案 3 :(得分:1)
使用:
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'
答案 4 :(得分: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();
}
答案 5 :(得分: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;
}