创建和删除一个zip文件

时间:2019-03-20 18:21:19

标签: java junit5

我写了一个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

    }

1 个答案:

答案 0 :(得分:3)

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

  

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

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

此外,您的测试代码可能会异常终止,而没有正确关闭ZipOutputStream可能会锁定文件并防止删除的情况。您应该使用finally

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