如何创建zip文件并保留目录条目?

时间:2013-06-27 16:18:32

标签: java zip zipfile

我想从文件夹创建一个zip存档,并保留(非空)目录的条目。

在下面的代码中,FileInputStream在将目录传递给FileNotFoundException时会抛出AddToZip。我试图在实际写入字节周围设置一个条件,但它使整个存档无效。如何将目录条目添加到存档?

public static void addToZip(File directoryToZip, File file, ZipOutputStream zos) throws FileNotFoundException,
        IOException {

    String zipFilePath = file.getCanonicalPath().substring(directoryToZip.getCanonicalPath().length() + 1,file.getCanonicalPath().length());
    System.out.println("Writing '" + zipFilePath + "' to zip file");
    ZipEntry zipEntry = new ZipEntry(zipFilePath);
    zos.putNextEntry(zipEntry);
    FileInputStream fis = new FileInputStream(file); // Throws a FileNotFoundException when directory
    byte[] bytes = new byte[1024];
    int length;
    while ((length = fis.read(bytes)) >= 0) {
        zos.write(bytes, 0, length);
    }

    zos.closeEntry();
    fis.close();

}

2 个答案:

答案 0 :(得分:0)

我相信你的答案就在这篇旧帖中。请检查。

directories in a zip file when using java.util.zip.ZipOutputStream

答案 1 :(得分:0)

我已经编写了一些实用程序方法,使用NIO.2 File API将文件和目录复制到Zip文件(该库是开源的):

的Maven:

<dependency>  
    <groupId>org.softsmithy.lib</groupId>  
    <artifactId>softsmithy-lib-core</artifactId>  
    <version>0.3</version>  
</dependency>

教程:

http://softsmithy.sourceforge.net/lib/current/docs/tutorial/nio-file/index.html#AddZipResourceSample

API:CopyFileVisitor.copy