使用 java.util...zip.ZipOutputStream 时 zip 文件中的目录

2022-09-01 03:24:55

假设我有一个文件t.txt,一个目录t和另一个文件t / t2.txt。如果我使用linux zip实用程序“zip -r t.zip t.txt t”,我会得到一个包含以下条目的zip文件(解压缩-l t.zip):

Archive:  t.zip
  Length     Date   Time    Name
 --------        ----      ----      ----
        9  04-11-09 09:11   t.txt
        0  04-11-09 09:12   t/
      15  04-11-09 09:12   t/t2.txt
 --------                           -------
       24                          3 files

如果我尝试使用java.util..zip.ZipOutputStream复制该行为并为该目录创建一个zip条目,java会引发异常。它只能处理文件。我可以在zip文件中创建一个t / t2.txt条目,并使用t2.txt文件内容添加到其中,但我无法创建目录。为什么?


答案 1

ZipOutputStream 可以通过在文件夹名称后添加正斜杠来处理空目录。试用(/)

public class Test {
    public static void main(String[] args) {
        try {
            FileOutputStream f = new FileOutputStream("test.zip");
            ZipOutputStream zip = new ZipOutputStream(new BufferedOutputStream(f));
            zip.putNextEntry(new ZipEntry("xml/"));
            zip.putNextEntry(new ZipEntry("xml/xml"));
            zip.close();
        } catch(Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

答案 2

只需浏览java.util..zip.ZipEntry的来源。如果 ZipEntry 的名称以“/”字符结尾,则将其视为目录。只需在目录名称后加上“/”。

检查此示例是否仅压缩空目录,http://bethecoder.com/applications/tutorials/showTutorials.action?tutorialId=Java_ZipUtilities_ZipEmptyDirectory

祝你好运。


推荐