java file.delete()失效原因及修复

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版权协议,转载请附上原文出处链接和本声明。