ZipInputStream 및 ZipOutputStream을 사용해 보았습니다. 그러나 ZipInputStream은 "getNextEntry()"를 수행 할 때 항상 실패합니다. 기본적으로 "getNextEntry()"의 코드 행은 다음과 같습니다.
...
if ((entry = readLOC()) == null) {
return null;
}
...
일부 항목 후에는 null이 반환되어 더 이상 얻을 수 없습니다.
그러나 결국 내가 ZipFile에이 문제없이 모든 우편 항목을 읽는하고, 용액은 다음과 같이 보이기 때문에 함께 ZipOutputStream이 함께 ZipFile를를 사용하여 문제를 해결할 수 :
protected void repairZipFile(String file) throws IOException {
File repairZipFile = new File(file+".repair");
ZipFile zipFile = new ZipFile(file);
Enumeration<? extends ZipEntry> zipFileEntries = zipFile.entries();
InputStream zis;
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(repairZipFile));
byte[] b = new byte[1024];
while(zipFileEntries.hasMoreElements()){
ZipEntry zipEntry = zipFileEntries.nextElement();
zos.putNextEntry(zipEntry);
zis = zipFile.getInputStream(zipEntry);
int n = zis.read(b);
while(n>=0) {
zos.write(b, 0, n);
n = zis.read(b);
}
zis.close();
zos.closeEntry();
}
zipFile.close();
zos.flush();
zos.close();
Files.move(repairZipFile.toPath(), (new File(file)).toPath(), StandardCopyOption.REPLACE_EXISTING);
}
7-ZIP의 [LZMA SDK (HTTP : // www.7-zip.org/sdk.html) 여기 유용 할 수 있습니다. – Vulcan