java提供的ZIP压缩方法
用到了三个类 ZipEntry ZipOutputStream ZipInputStream
代码如下
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
public class Zipyasuojiaya {
public static void main(String args[]) {
file2zip("C:\\abcdefg.zip");
zip2file();
}
// 文件转zip文件,这里模拟一个文件夹和文件压缩
public static void file2zip(String zipPath) {
try {
File zipFile = new File(zipPath);
zipFile.getParentFile().mkdirs();
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
zipPath));
// 写一个文件
File f = new File("C:\\1.txt");
// 添加一个ZipEntry对象
out.putNextEntry(new ZipEntry("copy1.txt"));
FileInputStream in = new FileInputStream(f);
int b;
while ((b = in.read()) != -1) {
out.write(b);
}
in.close();
// 在压缩文件中创建一个文件夹
out.putNextEntry(new ZipEntry("abc/"));
// 向这个压缩中的文件夹写入一个文件
File f1 = new File("C:\\1.txt");
// 注意这里是文件在压缩文件中的位置,在解压的时候它的那么也是这个
out.putNextEntry(new ZipEntry("abc/copy2.txt"));
FileInputStream in1 = new FileInputStream(f1);
int b1;
while ((b1 = in1.read()) != -1) {
out.write(b1);
}
in1.close();
System.out.println("压缩完成");
// 没有关闭的话文件会存在异常
out.close();
} catch (Exception e) {
}
}
// 压缩文件转回文件形式
public static void zip2file() {
try {
ZipInputStream in = new ZipInputStream(new FileInputStream(
"C:\\abcdefg.zip"));
ZipEntry z = null;
while ((z = in.getNextEntry()) != null) {
if (z.isDirectory()) {
File f = new File("C:\\123\\" + z.getName() + "\\");
// 这里将文件夹创建,压缩文件夹中的文件也会当做一个个ZipEntry类,文件夹也是一个ZipEntry类。
f.mkdirs();
} else {
File f = new File("C:\\123\\" + z.getName());
OutputStream out = new FileOutputStream(f);
int b;
while ((b = in.read()) != -1) {
out.write(b);
}
out.close();
}
}
// 记得关闭
in.close();
} catch (Exception e) {
// 这里最好写点东西,要不出错也不知道
e.printStackTrace();
}
}
}