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


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值