gpt4 book ai didi

Java ZipInputStream 在读取图像的 ZipEntry 后关闭

转载 作者:行者123 更新时间:2023-12-04 06:40:05 36 4
gpt4 key购买 nike

我们正在尝试修改 2007 MS Excel 中的 XML 文件之一。为此,将使用 Java 的 ZipInputStream 解压缩 xlsx 文件,然后使用 ZipOutputStream 将其复制到新的 Zip 文件中。代码片段如下:

        FileInputStream fis = new FileInputStream("C:\\_132139TRD-GDR_Conversion.xlsx");
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));

FileOutputStream fos = new FileOutputStream("C:\\_132139TRD-GDR_Conversion123.xlsx");
ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(fos));

while ((entry = zis.getNextEntry()) != null) {

System.out.println("Processing Entry : " + entry.getName());
System.out.println("Processing Entry Size : " + entry.getSize());
System.out.println("Entry Available : " + zis.available());

if(entry.getName().equals(ZIP_ENTRY_WOOKBOOK_XML)){
//Process XML
}

ZipEntry ze = new ZipEntry(entry.getName());
zos.putNextEntry(ze);
if(entry.getName().equals(ZIP_ENTRY_WOOKBOOK_XML)){
zos.write(XML.getBytes());
}else{
ByteArrayOutputStream stream = new ByteArrayOutputStream();
while ((count = zis.read(data, 0, BUFFER)) != -1) {
stream.write(data, 0, count);
}
tempBuffer = stream.toByteArray();
zos.write(tempBuffer);
}
zos.closeEntry();
}
zos.close();
fos.close();
zis.close();
fis.close();

在这个片段中,当我们遇到一个 JPEG 文件后,“entry = zis.getNextEntry()”返回 null。我们无法读取下一个 ZipEntry - 这会导致 Excel 不完整。示例 Excel 文件的输出如下:
Start Date Mon Dec 06 15:33:33 IST 2010
Processing Entry : xl/media/Logo2005_JPM_A_Black_170x50.jpeg
Processing Entry Size : -1
Entry Available : 1
End Date Mon Dec 06 15:34:58 IST 2010

复制 JPEG 文件后,ZipInputStream 将立即关闭。 (复制图像后,entryEOF 和reachEOF 变量都变为真并且entry 为空)。

有没有人遇到过类似的问题?复制文件后reachEOF也会变为真的错误吗?

米顿。

最佳答案

这是因为您从 zis 读取图像数据。而不是来自 zis.getInputStream(entry) .

复制循环后,来自 zis 的所有数据将被读取,所以你会得到一个 EOF。

关于Java ZipInputStream 在读取图像的 ZipEntry 后关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4365531/

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