package com.test.wifi.zip;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.InputStream;
import java.util.Enumeration;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;
public class ZipUtils {
/***
* 压缩文件
*
* @param source
* 需要压缩的文件名或文件夹
* @param zipFileName
* 压缩到哪个文件
* @throws IOException
*/
public void ZIP(String source, String zipFileName) throws IOException {
ZipOutputStream zos = new ZipOutputStream(new File(zipFileName));
// 设置压缩的时候文件名编码为gb2312
zos.setEncoding("gb2312");
File f = new File(source);
if (f.isDirectory()) {
// 如果直接压缩文件夹
ZIPDIR(source, zos, f.getName() + "/");
} else {
ZIPDIR(f.getPath(), zos, new File(f.getParent()).getName() + "/");
ZIPFile(f.getPath(), zos, new File(f.getParent()).getName() + "/"
+ f.getName());
}
}
/***
* 解压
*
* @param sourceFileName
* 需要解压的文件名
* @param desDir
* 解压的文件夹
* @throws IOException
*/
public static void UnZIP(String sourceFileName, String desDir)
throws IOException {
// 创建压缩文件对象
ZipFile zf = new ZipFile(new File(sourceFileName));
// 获取压缩文件中的文件枚举
Enumeration<ZipEntry> en = zf.getEntries();
int length = 0;
byte[] b = new byte[2048];
// 提取压缩文件夹中的所有压缩实例对象
while (en.hasMoreElements()) {
ZipEntry ze = en.nextElement();
// System.out.println("压缩文件夹中的内容:"+ze.getName());
// System.out.println("是否是文件夹:"+ze.isDirectory());
// 创建解压缩后的文件实例对象
File f = new File(desDir + ze.getName());
// System.out.println("解压后的内容:"+f.getPath());
// System.out.println("是否是文件夹:"+f.isDirectory());
// 如果当前压缩文件中的实例对象是文件夹就在解压缩后的文件夹中创建该文件夹
if (ze.isDirectory()) {
f.mkdirs();
} else {
// 如果当前解压缩文件的父级文件夹没有创建的话,则创建好父级文件夹
if (!f.getParentFile().exists()) {
f.getParentFile().mkdirs();
}
// 将当前文件的内容写入解压后的文件夹中。
OutputStream outputStream = new FileOutputStream(f);
InputStream inputStream = zf.getInputStream(ze);
while ((length = inputStream.read(b)) > 0)
outputStream.write(b, 0, length);
inputStream.close();
outputStream.close();
}
}
}
/**
* 压缩文件
*
* @param sourceFileName
* @param zos
* @param tager
* @throws IOException
*/
private static void ZIPFile(String sourceFileName, ZipOutputStream zos,
String tager) throws IOException {
ZipEntry ze = new ZipEntry(tager);
zos.putNextEntry(ze);
// 读取要压缩文件并将其添加到压缩文件中
FileInputStream fis = new FileInputStream(new File(sourceFileName));
byte[] bf = new byte[2048];
int location = 0;
while ((location = fis.read(bf)) != -1) {
zos.write(bf, 0, location);
}
fis.close();
}
/**
* 压缩文件夹
*
* @param sourceDir
* @param zos
* @param tager
* @throws IOException
*/
private static void ZIPDIR(String sourceDir, ZipOutputStream zos,
String tager) throws IOException {
ZipEntry ze = new ZipEntry(tager);
zos.putNextEntry(ze);
File f = new File(sourceDir);
File[] flist = f.listFiles();
if (flist != null) {
for (File fsub : flist) {
if (fsub.isDirectory()) {
ZIPDIR(fsub.getPath(), zos, tager + fsub.getName() + "/");
} else {
ZIPFile(fsub.getPath(), zos, tager + fsub.getName());
}
}
}
}
}
java 压缩文件的处理
最新推荐文章于 2023-07-21 11:53:12 发布