Java中实现zip的压缩与解压缩
1 基本概念
ZipOutputStream 实现文件的压缩
ZipOutputStream (OutputStream out) 创建新的zip输出流
void putNextEntry(ZipEntry e) 开始写入新的zip文件条目并将流定位到条目数据的开始处
条目指的是一个文件夹下的多个文件。
ZipEntry(String name) 使用指定名称创建新的zip条目
ZipIutputStream实现文件的解压
ZipIutputStream (IutputStream out) 创建新的zip输入流
ZipEntry getNextEntry()读取下一个zip条目并将流定位到该条目数据的开始处
2 zip压缩
zip压缩和解压代码实现
import java.io.*;
import java.util.zip.*;
public class ZipUtil {
/**
* 文件压缩zip
*
* @param filePath 源文件绝对路径
* @param zipFilePath 需要压缩生成的文件路径
* @throws Exception
*/
public static void zip(String filePath, String zipFilePath) throws Exception {
File inputFile = new File(filePath);
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
zipFilePath)); // 创建ZipOutputStream类对象
zip(out, inputFile, filePath.substring(filePath.lastIndexOf(File.separator) + 1)); // 调用方法
out.close(); // 将流关闭
}
private static void zip(ZipOutputStream out, File f, String base)
throws Exception { // 方法重载
if (f.isDirectory()) { // 测试此抽象路径名表示的文件是否是一个目录
File[] fl = f.listFiles(); // 获取路径数组
out.putNextEntry(new ZipEntry(base + "/")); // 写入此目录的entry
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(f.getName())); // 以当前文件名创建新的进入点
// 创建FileInputStream对象
FileInputStream in = new FileInputStream(f);
int b; // 定义int型变量
while ((b = in.read()) != -1) { // 如果没有到达流的尾部
out.write(b); // 将字节写入当前ZIP条目
}
in.close(); // 关闭流
}
}
/**
* zip文件解压
*
* @param inputFile 待解压文件夹/文件
* @param destDirPath 解压路径
*/
public static void unZip(String inputFile, String destDirPath) throws Exception {
File srcFile = new File(inputFile);//获取当前压缩文件
// 判断源文件是否存在
if (!srcFile.exists()) {
throw new Exception(srcFile.getPath() + "所指文件不存在");
}
//开始解压
//构建解压输入流
ZipInputStream zIn = new ZipInputStream(new FileInputStream(srcFile));
ZipEntry entry = null;
File file = null;
while ((entry = zIn.getNextEntry()) != null) {
if (!entry.isDirectory()) {
file = new File(destDirPath, entry.getName());
if (!file.exists()) {
new File(file.getParent()).mkdirs();//创建此文件的上级目录
}
OutputStream out = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(out);
int len = -1;
byte[] buf = new byte[1024];
while ((len = zIn.read(buf)) != -1) {
bos.write(buf, 0, len);
}
// 关流顺序,先打开的后关闭
bos.close();
out.close();
}
}
}
public static void main(String[] temp) {
try {
//文件压缩测试
zip("D:/ftp-download/测试目录/演示文稿1.pptx", "D:/ftp-download/测试目录/演示文稿1.zip");
//文件解压测试
unZip("D:/ftp-download/测试目录/演示文稿1.zip", "D:/ftp-download/测试目录/unuzip/");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
本文介绍了Java中如何实现ZIP文件的压缩和解压缩。通过使用ZipOutputStream进行文件压缩,通过ZipInputStream实现文件的解压。文章详细讲解了相关类和方法的用法,包括ZipOutputStream的putNextEntry()和ZipEntry的构造方法,以及ZipInputStream的getNextEntry()等关键步骤。
151

被折叠的 条评论
为什么被折叠?



