将 JarOutputStream 添加到 ZipOutputStream
Add JarOutputStream to ZipOutputStream
目前我已经生成了一个 JarOutputStream 和一个包含 *.java 个文件的目录。
我想将最终的 JarOutputStream 添加到 ZipOutputStream 到 return 包含目录和 *.jar 文件的最终 *.zip 文件。
现在我想知道如何以及是否可以将 JarOutputStream 添加到 ZipOutputStream。
非常感谢!
我不确定您所说的“我生成了 JarOutputStream”是什么意思。但是如果你想将内容写入一个 JAR 文件,然后再写入一个 ZIP 文件,而不需要将所有内容都保存在内存中,你可以按以下方式执行此操作:
public static class ExtZipOutputStream extends ZipOutputStream {
public ExtZipOutputStream(OutputStream out) {
super(out);
}
public JarOutputStream putJarFile(String name) throws IOException {
ZipEntry zipEntry = new ZipEntry(name);
putNextEntry(zipEntry);
return new JarOutputStream(this) {
@Override
public void close() throws IOException {
/* IMPORTANT: We finish writing the contents of the ZIP output stream but do
* NOT close the underlying ExtZipOutputStream
*/
super.finish();
ExtZipOutputStream.this.closeEntry();
}
};
}
}
public static void main(String[] args) throws FileNotFoundException, IOException {
try (ExtZipOutputStream zos = new ExtZipOutputStream(new FileOutputStream("target.zip"))) {
try (JarOutputStream jout = zos.putJarFile("embed.jar")) {
/*
* Add files to embedded JAR file here ...
*/
}
/*
* Add additional files to ZIP file here ...
*/
}
}
目前我已经生成了一个 JarOutputStream 和一个包含 *.java 个文件的目录。
我想将最终的 JarOutputStream 添加到 ZipOutputStream 到 return 包含目录和 *.jar 文件的最终 *.zip 文件。
现在我想知道如何以及是否可以将 JarOutputStream 添加到 ZipOutputStream。
非常感谢!
我不确定您所说的“我生成了 JarOutputStream”是什么意思。但是如果你想将内容写入一个 JAR 文件,然后再写入一个 ZIP 文件,而不需要将所有内容都保存在内存中,你可以按以下方式执行此操作:
public static class ExtZipOutputStream extends ZipOutputStream {
public ExtZipOutputStream(OutputStream out) {
super(out);
}
public JarOutputStream putJarFile(String name) throws IOException {
ZipEntry zipEntry = new ZipEntry(name);
putNextEntry(zipEntry);
return new JarOutputStream(this) {
@Override
public void close() throws IOException {
/* IMPORTANT: We finish writing the contents of the ZIP output stream but do
* NOT close the underlying ExtZipOutputStream
*/
super.finish();
ExtZipOutputStream.this.closeEntry();
}
};
}
}
public static void main(String[] args) throws FileNotFoundException, IOException {
try (ExtZipOutputStream zos = new ExtZipOutputStream(new FileOutputStream("target.zip"))) {
try (JarOutputStream jout = zos.putJarFile("embed.jar")) {
/*
* Add files to embedded JAR file here ...
*/
}
/*
* Add additional files to ZIP file here ...
*/
}
}