1、在工作中,有一些场景需要我们将一些文件下载到本地进行处理,一般放一个临时文件夹中,但是日积月累就会造成文件夹内存很庞大,所以我们需要在下载使用完成后再去删除文件,减小服务器的内存危机。所以使用到了file.delete()的方法,但是在使用时发现有时会失效,失效的原因一般如下:
(1)、缓存中在使用文件时,delete失效,说明缓存有部分在使用,需要先清除缓存。
在delete方法前,加上如下 System.gc();
(2)、文件被占用,需要确定你这个文件是否被其他的线程在使用,只有等文件完全没有被使用时才会有效果。
有一种特俗情况,就是IO流没有关闭时,抛出异常也没有捕获处理,就会造成文件将一直被占用,不能释放。
这种情况需要确定两点,第一处理文件完毕,第二正常关闭文件流。建议使用try catch finally语法,将业务写在try中,在finally中先关闭所有的IO流,在进行delete方法的删除
附:个人解决delete无校的代码方案
try {
...IO流,文件读写业务
} catch (Exception e) {
logger.error("" + e);
} finally {
// 关闭使用的IO流
randomFile.close();
out.close();
// 清除tomcat的temp下的临时视频文件
if (file != null && file.exists()) {
File fileTemp = new File("../temp");
File[] files = fileTemp.listFiles();
for (File file1 : files) {
// 清除缓存
System.gc();
// 删除文件
file1.delete();
}
}
}
版权声明:本文为qq_34207422原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。