繁体   English   中英

创建和删除zip文件

[英]Create and delete a zip file

我写了一个JUnit 5测试,我需要创建一个zip文件,在其上放置一些文本文件并删除zip文件。

我在创建zip文件及其中的文本文件时没有任何问题,但每当我调用file.delete()它都会返回false

我甚至试图创建一个空的zip文件,它也无法删除它。 有办法解决这个问题吗?

    static File file;

    @BeforeAll
    static void setUp() throws IOException {

        ZipOutputStream out = new ZipOutputStream(new FileOutputStream(file=File.createTempFile("tempDir",".zip")));

        ZipEntry e = new ZipEntry("emptyFile.txt");
        out.putNextEntry(e);    
        out.closeEntry();    

        e = new ZipEntry("oneLineFile.txt");
        out.putNextEntry(e);

        StringBuilder sb;
        byte[] data;
        sb = new StringBuilder();
        sb.append("route_id,agency_id,route_short_name,route_long_name,route_type");
        data = sb.toString().getBytes();
        out.write(data, 0, data.length);

        out.closeEntry();

        out.close();
    }

    @AfterAll
    static void set(){

        file.delete(); // return false

    }

如果您没有创建太多临时文件,请使用File.deleteOnExit()

请求在虚拟机终止时删除此抽象路径名表示的文件或目录。 文件(或目录)的删除顺序与注册顺序相反。 调用此方法删除已注册删除的文件或目录无效。 将仅尝试删除虚拟机的正常终止,如Java语言规范所定义。

文件系统操作可能不安全,例如Windows喜欢锁定JVM进程使用的文件。

此外,您的测试代码可以终止异常,而无需正确关闭ZipOutputStream可能会锁定文件并阻止删除。 finally应该使用:

ZipOutputStream out = null;
try {
  out = ...
} finally {
  if (out != null) 
    out.close();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM