一般来说 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"; }
还有一种不是因为流占用的原因,后在网上看到一种解决方式
-
public static boolean forceDelete(File f)
-
{
-
boolean result = false;
-
int tryCount = 0;
-
while(!result && tryCount++ < 10)
-
{
-
System.gc();
-
result = f.delete();
-
}
-
return result;
-
}
继续查阅资料,好像是因为映射占用的问题,在如下网站有解决方式
https://stackoverflow.com/questions/2972986/how-to-unmap-a-file-from-memory-mapped-using-filechannel-in-java