本文主要是介绍解决file.delete老是失败的问题,批量删除文件夹下的文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
file.delete有时会失败,解决
解决file.delete失败问题
最近在项目中遇到是要FIle的delete方法后,文件一直删除不了,经排查,是当时刚好有文件处于读取状态(可能是文件夹里面直接读取或是java程序后台读取使用InputStreamReader或BufferedOutputStream这种流没有关闭)
解决:在调用这个delete之前使用system.gc()使用java垃圾回收,通知虚拟机希望进行一次垃圾回收,注意:这里并不一定会马上执行垃圾回收,至于什么时候进行回收还是取决于虚拟机,而且也不能保证一定进行回收
这里我是要删除这个文件夹下所有文件,所以使用for循环,由于不确定什么时候虚拟机会进行垃圾回收,所以循环了10次去遍历执行
for (String file : filels) {File fl = new File(file);final boolean result = false;int tryCount = 0;while (!result && tryCount++ < 10) {System.gc();fl.delete();}
}
批量删除某个文件夹下的所有文件
后面觉得效率很低,如果我有1000个文件删除这个去循环太慢了,后面找到一种直接使用window或linux底层命令去执行删除,这个效率会快很多,Runtime和Process都是jdk自带的包(我用的是1.8版本),不用额外引入(url是你传入的需要删除的文件地址)
logger.info("开始删除文件,地址:"+url);
Runtime runtime = Runtime.getRuntime();
// linux版本:String[] args = new String[] {"sh", "-c", "rm -f -r /usr/dir"};
// window版本String[] arg = new String[] {"cmd.exe", "/c", "rd D:\\a\\20210101 /q /s"};
String[] arg = new String[] { "cmd.exe", "/c", "rd " + url + " /q /s" };
try {Process proc = runtime.exec(arg);
} catch (IOException e) {e.printStackTrace();
}
大家可以试试,有问题评论区见!
这篇关于解决file.delete老是失败的问题,批量删除文件夹下的文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!