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换成即可。这样程序在执行完时,不会去删除生成的视频。

你可能感兴趣的:(java)