JAVA 文件无法删除怪异解决 .delete()无效,但返回true 递归删除文件

最近做一个项目,springMVC   一个类文件上传后,另一类对该文件操作后删除,

        file.delete(),打印返回true,但是文件没有被成功删除

       手动删除,提示正在被jvm占用。 

        怀疑操作流没有关闭,检查,未发现。

        改用FileUtils.deleteQuietly(),问题依旧。

        怀疑引用类有未知bug,于是专门写一个类,只进行删除操作,问题依旧。

        正在烦躁,无意间将web窗口重启,一直是用jetty跑的,这次无意选了tomcat

        奇迹出现,问题解决了。回到jetty问题复现。

        不知道原因,google未果……算是多了一种解决问题的思路,代码上找不到突破口,换换容器试试,说不定柳暗花明。

         提供一个文件删除的类。备用。

        

  1. public class Delfile {    
  2.     
  3.  /**  
  4.   * 删除某个文件夹下的所有文件夹和文件  
  5.   *  
  6.   * @param delpath  
  7.   *            String  
  8.   * @throws FileNotFoundException  
  9.   * @throws IOException  
  10.   * @return boolean  
  11.   */    
  12.  public static boolean deletefile(String delpath) throws Exception {    
  13.   try {    
  14.     
  15.    File file = new File(delpath);    
  16.    // 当且仅当此抽象路径名表示的文件存在且 是一个目录时,返回 true    
  17.    if (!file.isDirectory()) {    
  18.     file.delete();    
  19.    } else if (file.isDirectory()) {    
  20.     String[] filelist = file.list();    
  21.     for (int i = 0; i < filelist.length; i++) {    
  22.      File delfile = new File(delpath + "\\" + filelist[i]);    
  23.      if (!delfile.isDirectory()) {    
  24.       delfile.getAbsoluteFile().delete();  
  25.       System.out  .println(delfile.getAbsolutePath() + "删除文件成功");    
  26.      } else if (delfile.isDirectory()) {    
  27.       deletefile(delpath + "\\" + filelist[i]);    
  28.      }    
  29.     }    
  30.     System.out.println(file.getAbsolutePath()+"删除成功");    
  31.     file.getAbsoluteFile().delete();  
  32.    }    
  33.     
  34.   } catch (FileNotFoundException e) {    
  35.    System.out.println("deletefile() Exception:" + e.getMessage());    
  36.   }    
  37.   return true;    
  38.  }    
  39.     
  40.  /**  
  41.   * 输出某个文件夹下的所有文件夹和文件路径  
  42.   *  
  43.   * @param delpath  
  44.   *            String  
  45.   * @throws FileNotFoundException  
  46.   * @throws IOException  
  47.   * @return boolean  
  48.   */    
  49.  public static boolean readfile(String filepath)    
  50.    throws FileNotFoundException, IOException {    
  51.   try {    
  52.     
  53.    File file = new File(filepath);    
  54.    System.out.println("遍历的路径为:" + file.getAbsolutePath());    
  55.    // 当且仅当此抽象路径名表示的文件存在且 是一个目录时(即文件夹下有子文件时),返回 true    
  56.    if (!file.isDirectory()) {    
  57.     System.out.println("该文件的绝对路径:" + file.getAbsolutePath());    
  58.     System.out.println("名称:" + file.getName());    
  59.    } else if (file.isDirectory()) {    
  60.     // 得到目录中的文件和目录    
  61.     String[] filelist = file.list();    
  62.     if (filelist.length == 0) {    
  63.      System.out.println(file.getAbsolutePath()    
  64.        + "文件夹下,没有子文件夹或文件");    
  65.     } else {    
  66.      System.out    
  67.        .println(file.getAbsolutePath() + "文件夹下,有子文件夹或文件");    
  68.     }    
  69.     for (int i = 0; i < filelist.length; i++) {    
  70.      File readfile = new File(filepath + "\\" + filelist[i]);    
  71.      System.out.println("遍历的路径为:" + readfile.getAbsolutePath());    
  72.      if (!readfile.isDirectory()) {    
  73.       System.out.println("该文件的路径:"    
  74.         + readfile.getAbsolutePath());    
  75.       System.out.println("名称:" + readfile.getName());    
  76.      } else if (readfile.isDirectory()) {    
  77.       System.out.println("-----------递归循环-----------");    
  78.       readfile(filepath + "\\" + filelist[i]);    
  79.      }    
  80.     }    
  81.     
  82.    }    
  83.     
  84.   } catch (FileNotFoundException e) {    
  85.    System.out.println("readfile() Exception:" + e.getMessage());    
  86.   }    
  87.   return true;    
  88.  }    
  89.     
  90.    
  91.     
  92. }    
posted @ 2014-09-21 14:58  all_forone  阅读(1701)  评论(0编辑  收藏  举报