本人工作中设计到需要使用Java后台对文件进行压缩操作,而Java中通过ZipOutputStream和ZipInputStream实现对一个或多个文件的压缩与解压。压缩时文件时,创建zip输出流,并在流中添加zip条目,用流把文件的内容写入压缩文件中。解压时,创建zip输入流,并分别创建文件夹和zip条目对应的文件,再用流把zip条目中的内容写入个文件中。以下分别展示了如何对一个文件和多个文件实现压缩与解压。
单文件的压缩:
(1)压缩操作:
public class MyZipOut {
private static void zipOut(String name) throws IOException {
// 根据原文件名得到zip格式的文件名
String zipName = name.substring(0, name.indexOf("."))
+ ".zip";
// 根据原文件名得到zip条目的名称,即文件在压缩文件中的名字
String zeName = name.substring(name.indexOf("\\")+1);
// 创建文件输入流 、 文件输出流、 zip输出流
FileInputStream fis = new FileInputStream(name);
FileOutputStream fos = new FileOutputStream(zipName);
ZipOutputStream zos = new ZipOutputStream(fos);
// 创建zip条目,并将其添加至zip输出流中
ZipEntry ze = new ZipEntry(zeName);
zos.putNextEntry(ze);
//zos.putNextEntry(new ZipEntry(System.currentTimeMillis() + ""));
// 压缩文件
byte[] buf = new byte[1024];
int len;
while ((len = fis.read(buf)) != -1) {
zos.write(buf,0,len);
//zos.closeEntry();
}
// 关闭流,只有在关闭流后,文件内容才能写入成功
zos.close();
fis.close();
}
//main中进行调用测试:
public static void main(String[] args) {
String name = "D:\\扫码打印测试说明文档.docx"; //原文件路径
try {
System.err.println("---压缩文件开始---");
zipOut(name);
System.out.println("---压缩文件完成---");
} catch (IOException e) {
System.out.println("文件流异常信息-----:"+e);
System.out.println("压缩文件时出错!");
}
}
}