java file deleteOnExit()方法踩坑记

背景

  从视频存储中心下载视频保存到本地。发现执行过程确实能看到本地视频的产生,一旦程序执行完,该视频又被删除了。

code 如下 :


    @Test
    public void testDownloadVideo()  throws IOException {

        String url = "http://xxx/t.mp4";

        File file = new File("/Users/pengwei.xpw/test.mp4");
        file.deleteOnExit();
        if (!file.exists()) {
            file.createNewFile();
        }
        OutputStream out = new FileOutputStream(file);
        HttpClientParams httpClientParams = new HttpClientParams();
        httpClientParams.setSoTimeout(2000);
        httpClientParams.setConnectionManagerTimeout(2000);
        HttpUtils.getHttpResponse(url, out, httpClientParams);

        out.flush();
        out.close();

    }

怀疑deleteOnExit是不是在作怪,谷歌了下,得到了官方解释

Java file delete 和 deleteOnExit 区别

  • delete : 删除文件。一旦调用,程序立即执行删除操作
  • deleteOnExit :顾名思义 : 存在则删除。你以为这么简单?不要被别面迷惑了, 它被调用时,相当于对deleteOnExit做了一个生声明, 不会马上执行删除操作, 而是程序运行结束, JVM终止时才真正调用删除操作。即该方法是将删除的命令缓存了一下,到服务停止的时候再进行操作!

  恍然大悟,于是deleteOnExit换成即可。这样程序在执行完时,不会去删除生成的视频。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值