我有一个耳朵档案,“ archive.ear”。该档案文件包含一个战争文件“ archive.war”。在此文件中,我想用磁盘上存在的新文件替换“ /myFile.properties”文件。
新文件的内容保存在名为“ file”的java.io.File对象中。我将存档中“ /myFile.properties”的输出流保存在java.io.OutputStream对象中。之后,我尝试使用
org.apache.commons.io.FileUtils.copy(File input, OutputStream output)
当前代码为:
// Java method from extracting the output stream
public OutputStream getOutputStream(OutputStream out, String entry) throws IOException {
ZipOutputStream zos = new ZipOutputStream(out);
ZipEntry zipEntry = new ZipEntry(entry);
while (zipEntry != null) {
if (zipEntry.toString().equals(entry)) {
return zos;
}
}
throw new IllegalStateException("No entry '" + entry + "' found");
}
// copy the file content to output stream
// extract output stream "archive.war" from "archive.ear"
OutputStream warOs = zu.getOutputStream(new FileOutputStream("archive.ear"), "archive.war");
// extract output stream "<path>/myFile.properties" from "archive.war"
OutputStream myFileOutput = zu.getOutputStream(warOs, "<path>/myFile.properties" );
FileUtils.copyFile(file, myFileOutput);
我也尝试使用,安装了copyFile():
myFileOutput.write(getBytesFromFile(file));
“ getBytesFromFile()”方法从文件对象返回字节数组。
当我打开战争档案时,我希望“ myFile.properties”具有新的内容,该内容位于Java对象“ file”中。该文件具有正确的内容。 结果是ZipException:
Exception in thread "main" java.util.zip.ZipException: no current ZIP entry
at java.util.zip.ZipOutputStream.write(Unknown Source)
at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:2315)
at org.apache.commons.io.IOUtils.copy(IOUtils.java:2270)
at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:2291)
at org.apache.commons.io.FileUtils.copyFile(FileUtils.java:1094)
at main.Main.main(Main.java:69)
答案 0 :(得分:1)
您不能(轻松)使用Java操作现有的zip文件。 您将必须以回旋的方式进行操作。