java中File的delete()方法删除文件失败的原因

一般来说 java file.delete失败 有以下几个原因 
1.看看是否被别的进程引用,手工删除试试(删除不了就是被别的进程占用)
2.file是文件夹 并且不为空,有别的文件夹或文件, 
3.极有可能有可能自己前面没有关闭此文件的流(我遇到的情况)
 
这个方法我用来获取文件的大小,用到了流类,但是用完了没有关闭,导致无法删除文件:
public String getfilesize(String path,String filename) throws IOException {
  String pathString=path+"\\"+filename;
  f=new File(pathString);
  FileInputStream fis=new FileInputStream(f);
  String time=String.valueOf(((double)fis.available() / 1024));
  fis.close();//当时这里没有关闭
  return time.substring(0, time.indexOf(".")+2)+"K";
 }

还有一种不是因为流占用的原因,后在网上看到一种解决方式

 

  1. public static boolean forceDelete(File f)
  2. {
  3. boolean result = false;
  4. int tryCount = 0;
  5. while(!result && tryCount++ < 10)
  6. {
  7. System.gc();
  8. result = f.delete();
  9. }
  10. return result;
  11. }
执行10次垃圾回收后删除,目前可以解决这个问题

继续查阅资料,好像是因为映射占用的问题,在如下网站有解决方式

https://stackoverflow.com/questions/2972986/how-to-unmap-a-file-from-memory-mapped-using-filechannel-in-java


猜你喜欢

转载自blog.csdn.net/BinGuoLA/article/details/80855250