gpt4 book ai didi

java - ZipOutputStream - 先 closeEntry() 或先 close()

转载 作者:行者123 更新时间:2023-11-29 06:34:36 25 4
gpt4 key购买 nike

以下是部分代码。我需要在 finally 子句中关闭资源。我需要先调用 closeEntry() 还是 close()?我收到一些错误消息。

Error closing the zipoutjava.io.IOException: Stream closed at 
java.util.zip.ZipOutputStream.ensureOpen(ZipOutputStream.java:70) at
java.util.zip.ZipOutputStream.closeEntry(ZipOutputStream.java:189)

代码

 ZipOutputStream zos = null;

try{

ZipEntry entry = new ZipEntry("file.csv")
zipout.putNextEntry(entry);
csvBeanWriter = new CsvBeanWriter(writer,
CsvPreference.STANDARD_PREFERENCE);
csvBeanWriter.writeHeader(header);
for (Book book : bookList) {
csvBeanWriter.write(book, header);
csvBeanWriterTest.write(book, header);

}

} catch (Exception e) {
logger.error("Export of package data failed: "
+ e);

} finally {

if (zipout != null) {
try {
zos.closeEntry();
zos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
logger.error("Error closing the zos"
+ e);
}
}
}

最佳答案

考虑使用zipout的方案:

zipout = // open zipout someway
// do something with it
zipout.close();

所以,在 block 中,我们用 zipout 做一些事情,你应该创建和关闭条目:

ZipEntry z = ...
// do something with it
zipout.closeEntry();

最终的方案是:

zipout = ...

ZipEntry z1 = ...
zipout.putNextEntry(z1);
// write something to zipout
zipout.closeEntry();

ZipEntry z2 = ...
zipout.putNextEntry(z2);
// write something to zipout
zipout.closeEntry();

//...

ZipEntry zN = ...
zipout.putNextEntry(zN);
// write something to zipout
zipout.closeEntry();


zipout.close();

所以,你应该先关闭入口,然后zipout

示例代码:https://community.oracle.com/thread/2097141?start=0

关于java - ZipOutputStream - 先 closeEntry() 或先 close(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23764265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com