File对象占用,导致文件创建目录失败

  •    最近写了一个关于文件操作的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();
 }
}

原文地址:https://www.cnblogs.com/CanWork/p/3329656.html