这个问题通常发生在使用ZIP64格式的大文件时,可以使用以下代码来解决此问题:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
public class ZipUtils {
public static void zip(String sourceFile, String targetFile) throws IOException {
// bufferedOutputStream可以加速压缩输出
try (FileOutputStream fos = new FileOutputStream(targetFile);
ZipOutputStream zos = new ZipOutputStream(fos);
FileInputStream fis = new FileInputStream(sourceFile);
ZipInputStream zis = new ZipInputStream(fis)) {
ZipEntry ze = zis.getNextEntry();
zos.putNextEntry(new ZipEntry(ze.getName()));
byte[] buffer = new byte[1024];
int len;
while ((len = zis.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
// 需要关闭zos才能确保压缩文件结构正确性
zos.close();
}
}
}
在调用zip方法时,只需将源文件路径和目标文件路径传递给它即可:
String sourceFile = "path/to/source/file";
String targetFile = "path/to/target/file.zip";
ZipUtils.zip(sourceFile, targetFile);