- 最近写了一个关于文件操作的java程序,简单来说包括两部分,一部分为文件夹的删除,紧接着的另外一部分为文件夹的创建。
- 可以在测试的时候发现,有一定的概率,文件夹的创建会失败。
- 结论是在利用文件句柄对文件夹进行复杂操作时(例如删除具有多层子文件夹的文件),随后对该文件夹的操作很可能会失败。
- 最终解决方案为:如在删除文件夹后,仍需重新建立该文件夹目录,则在删除的时候只删除文件夹内的内容,保留文件夹本身,从未回避File对象占用的问题。
- 如有其他解决方法或不同意见,望告知,万分感谢
具体代码如下:其中1为C盘下一个具有多层子文件夹的测试文件,大小为30MB
import java.io.File;
public class Test{
private static final String filename = "c:\1";
public static void main(String args[])
{
File file = new File(filename);
deleteFolder(file);
//尝试进行垃圾回收,解决句柄占用,没作用
System.gc();
File file2 = new File(filename);
if(!file2.exists())
{
if(!file2.mkdirs())
{
System.out.println("file is busy.");
}
else{
System.out.println("file is not busy.");
}
}
}
//删除文件夹
private static boolean deleteFolder(File file){
if(file.exists())
{
deleteFiles(file);
return true;
}
return false;
}
private static boolean deleteFiles(File file)
{
if(!file.delete())
{
File[] files = file.listFiles();
for(int i=0;i<files.length;i++)
{
deleteFiles(files[i]);
}
}
return file.delete();
}
}