本文是对前面写的《Java实现压缩解压文件》进行了问题修复与功能补充。
问题修复:
老版本在实现上面有些问题,在通过addFile像压缩包中添加文件时,一旦前面的addFile添加文件失败,就会导致接下来所有的addFile都无法成功。原先的方法实现为:
public ZipObject addFile(byte[] fileBytes, String fileName) {
try {
// 可以理解一个ZipEntry就表示压缩包里面的一个文件
ZipEntry zipEntry = new ZipEntry(fileName);
zos.putNextEntry(zipEntry);
zos.write(fileBytes, 0, fileBytes.length);
} catch (IOException e) {
e.printStackTrace();
if (bos!=null) {
try {
bos.close();
} catch (IOException ee){}
}
if (zos!=null) {
try {
zos.close();
} catch (IOException ee){}
}
}
return this;
}
上述原因是因为在异常捕获catch代码块中的bos.close()与zos.close()将文件流关闭了,这样在后续继续调用addFile时就会出现报错了。因此,不需要关闭文件流。改造后的方法为:
public ZipObject addFile(byte[] fileBytes, String fileName) {
try {
// 可以理解一个ZipEntry就表示压缩包里面的一个文件
ZipEntry zipEntry = new ZipEntry(fileName);
zos.putNextEntry(zipEntry);
zos.write(fileBytes, 0, fileBy