JAVA之利用java.util.zip包进行文件压缩
知识普及:
java.util.zip包中的ZipOutputStream类与ZipInputStream类实现文件的压缩/解压
ZipInputStream类:用来读取zip压缩格式的文件,所支持的包括已压缩及未压缩的进入点(entry).
ZipOutputStream类:用来 写出Zip压缩格式的文件,而且所支持的包括已压缩及未压缩的进入点(entry)
1:创建java项目且创建文件夹:ya_suo_zip
1:文件MyZip.java
代码:
package ya_suo_zip;
//导入java.io包
import java.io.*;
//导入java.util.zip包
import java.util.zip.*;
//创建类
public class MyZip {
void zip(String zipFileName, File inputFile) throws Exception {
// 创建ZipOutputStream类对象
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
zipFileName));
// 调用方法
zip(out, inputFile, "");
// 输出信息
System.out.println("压缩中…");
// 将流关闭
out.close();
}
// 方法重载
private void zip(ZipOutputStream out, File f, String base) throws Exception {
// 测试此抽象路径名表示的文件是否是一个目录
if (f.isDirectory()) {
// 获取路径数组
File[] fl = f.listFiles();
// 写入此目录的entry
out.putNextEntry(new ZipEntry(base + "/"));
// 判断参数是否为空
base = base.length() == 0 ? "" : base + "/";
// 循环遍历数组中文件
for (int i = 0; i < fl.length; i++) {
zip(out, fl[i], base + fl[i]);
}
} else {
// 创建新的进入点
out.putNextEntry(new ZipEntry(base));
// 创建FileInputStream对象
FileInputStream in = new FileInputStream(f);
// 定义int型变量
int b;
System.out.println(base);
// 如果没有到达流的尾部
while ((b = in.read()) != -1) {
// 将字节写入当前ZIP条目
out.write(b);
}
// 关闭流
in.close();
}
}
}
2:文件MyZipDemo.java
代码:
package ya_suo_zip;
import java.io.File;
public class MyZipDemo {
// 主方法
public static void main(String[] temp) {
// 创建本例对象
MyZip book = new MyZip();
try {
// 调用方法,参数为压缩后文件与要压缩文件
book.zip("D:/2018.4.5号斗南.zip", new File("D:/2018.4.5号斗南.zip"));
System.out.println("压缩完成"); // 输出信息
} catch (Exception ex) {
}
}
}