我有一小段代码
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 找到。注意:上面的代码没有提交或推送到那里!!!!!!!!
答案 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;
}
}