2007 Microsoft Excel에서 XML 파일 중 하나를 수정하려고합니다. 이를 위해 xlsx 파일은 Java의 ZipInputStream을 사용하여 압축 해제 된 다음 ZipOutputStream을 사용하여 새 Zip 파일로 복사됩니다. 코드 조각은 다음과 같습니다 :이 조각에서이미지의 ZipEntry를 읽은 후 Java ZipInputStream이 닫힙니다.
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 파일 발생 후 "항목 = 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
ZipInputStream는 즉시 JPEG 파일이 복사로 폐쇄됩니다. (이미지를 복사 한 후에는 entryEOF 및 reachEOF 변수가 모두 true로 설정되고 항목이 null입니다).
아무도 비슷한 문제에 직면 했습니까? 파일을 복사 한 후에도 reachEOF가 true가되는 버그입니까?
Midhun.