我想分解一个包含多个文件的 zip 文件,并为每个 ZipEntries 创建一个 zip 文件。那是:MainZipFile.zip ---> Zip1.zip、Zip2.zip、Zip3.zip其中(右侧)RHS zip 文件对应于 MainZipFile.zip 中的 ZipEntry。
我正在使用Java,并且我想在不解压缩和重新压缩的情况下执行此操作,这是显而易见的解决方案。我什至不确定这实际上是否可行。
我正在考虑创建空的 RHS zip 文件,然后使用 ZipInputStream 读取 MainZipFile.zip 中 ZipEntry 的内容并将内容存入相应的 RHS zip 文件中,但我无法弄清楚。
编辑1:
final int BUFFER_SIZE_IN_BYTES=2*1024; //2KB
void tryReading(){
String filepath = getTempFilepath();
ZipFile mainZipFile = new ZipFile(filepath);
InputStream inForEntry = getInputStreamForEntryWithName(checkpoint.getFilePath(), mainZipFile);
ZipInputStream zin = new ZipInputStream(inForEntry);
byte[] data = new byte[BUFFER_SIZE_IN_BYTES];
int countOfBytesRead = zin.read(data); //returns -1
zin.getNextEntry();
countOfBytesRead = zin.read(data);//returns -1
}
private InputStream getInputStreamForEntryWithName(String name, ZipFile mainZipFile) throws IOException {
ZipEntry entry = mainZipFile.getEntry(name);
return mainZipFile.getInputStream(entry);
}
从 ZipInputStream read() 上的 JavaDoc
从当前 ZIP 条目读取到字节数组中。如果 len 不为零,则该方法将阻塞,直到某些输入可用为止; 否则,不会读取任何字节并返回 0。
返回:实际读取的字节数,如果到达条目末尾则为 -1
我相信您正在阅读整个文件并读到最后。将您的读取包装在一个循环中,一次读取一个字节,看看是否可以让它输出任何内容。
我是一名优秀的程序员,十分优秀!