Java ZipEntry和Zipoutputstream目录

时间:2013-11-23 11:17:50

标签: java zip

我有一小段代码

   public void doBuild() throws IOException {
    ZipEntry sourceEntry=new ZipEntry(sourcePath);
    ZipEntry assetEntry=new ZipEntry(assetPath);
    ZipOutputStream out = new ZipOutputStream(new FileOutputStream("output/"+workOn.getName().replaceAll(".bld"," ")+buildNR+".zip"));
     out.putNextEntry(sourceEntry);
    out.putNextEntry(assetEntry);
    out.close();
    System.err.println("Build success!");
    increaseBuild();

}

所以,如果我运行它,它运行得很好,创建.zip和所有,但zip文件是空的。 sourceEntry和assetEntry都是目录。我怎样才能轻松地将这些目录放到我的.zip中?

对于那些感兴趣的人来说,这是一个MC mod构建系统,可以在https://bitbucket.org/makerimages/makerbuild-system 找到。注意:上面的代码没有提交或推送到那里!!!!!!!!

1 个答案:

答案 0 :(得分:0)

尝试这样的事情。参数useFullFileNames指定 是否要保留路径的全名 你要拉链的文件。

所以如果你有两个文件 的 /dir1/dir2/a.txt 和 的 /dir1/b.txt useFullFileNames指定是否要最终查看 zip文件那些原始路径到两个文件或只是 没有这样的路径的两个文件 的 A.TXT 和 的 b.txt 在您创建的zip文件的根目录中。

请注意,在我的示例中,压缩的文件 实际上是读取然后写入 out 。 我想你错过了这一部分。

    public static boolean createZip(String fNameZip, boolean useFullFileNames, String... fNames) throws Exception {
        try {
            int cntBufferSize = 256 * 1024;
            BufferedInputStream origin = null;
            FileOutputStream dest = new FileOutputStream(fNameZip);
            ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest));
            byte bBuffer[] = new byte[cntBufferSize];
            File ftmp = null;
            for (int i = 0; i < fNames.length; i++) {
                if (fNames[i] != null) {
                    FileInputStream fi = new FileInputStream(fNames[i]);
                    origin = new BufferedInputStream(fi, cntBufferSize);
                    ftmp = new File(fNames[i]);
                    ZipEntry entry = new ZipEntry(useFullFileNames ? fNames[i] : ftmp.getName());
                    out.putNextEntry(entry);
                    int count;
                    while ((count = origin.read(bBuffer, 0, cntBufferSize)) != -1) {
                        out.write(bBuffer, 0, count);
                    }
                    origin.close();
                }
            }
            out.close();
            return true;
        } catch (Exception e) {
            return false;
        }
    }