【发布时间】:2019-04-16 12:54:21
【问题描述】:
我有一个耳朵存档,“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 对象“文件”中。该文件具有正确的内容。 结果是 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)
【问题讨论】: