您的位置:首页 > 运维架构 > Apache

Java 使用 org.apache.tools.zip.* 压缩文件源代码

2011-12-12 10:36 666 查看
Java 使用 org.apache.tools.zip.* 压缩/解压缩文件源代码

Java 使用 org.apache.tools.zip.* 压缩/解压缩文件的源代码。本源码支持中文路径和中文文件名;解决了压缩后有一个多余同名文件夹的 bug、压缩后用 7-zip 打开时根目录下的文件名前有“\”的 bug。

package com.defonds.cds.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class AntZipUtil {

public static void zipFile(String zipFileName, String inputFileName)
throws Exception {
org.apache.tools.zip.ZipOutputStream out = new org.apache.tools.zip.ZipOutputStream(
new FileOutputStream(zipFileName));
out.setEncoding("GBK");
File inputFile = new File(inputFileName);
zipIt(out, inputFile, "", true);
out.close();
}

/*
* 能支持中文的压缩 参数base 开始为"" first 开始为true
*/
public static void zipIt(org.apache.tools.zip.ZipOutputStream out, File f,
String base, boolean first) throws Exception {
if (f.isDirectory()) {
File[] fl = f.listFiles();
if (first) {
first = false;
} else {
base = base + "/";
}
for (int i = 0; i < fl.length; i++) {
zipIt(out, fl[i], base + fl[i].getName(), first);
}
} else {
if (first) {
base = f.getName();
}
out.putNextEntry(new org.apache.tools.zip.ZipEntry(base));
FileInputStream in = new FileInputStream(f);
int b;
while ((b = in.read()) != -1) {
out.write(b);
}
in.close();
}
}

public static void unZipFile(String unZipFileName, String unZipPath)
throws Exception {
org.apache.tools.zip.ZipFile zipFile = new org.apache.tools.zip.ZipFile(
unZipFileName);
unZipFileByOpache(zipFile, unZipPath);
}

/*
* 解压文件 unZip为解压路径
*/
public static void unZipFileByOpache(org.apache.tools.zip.ZipFile zipFile,
String unZipRoot) throws Exception, IOException {
java.util.Enumeration e = zipFile.getEntries();
org.apache.tools.zip.ZipEntry zipEntry;
while (e.hasMoreElements()) {
zipEntry = (org.apache.tools.zip.ZipEntry) e.nextElement();
InputStream fis = zipFile.getInputStream(zipEntry);
if (zipEntry.isDirectory()) {
} else {
File file = new File(unZipRoot + File.separator
+ zipEntry.getName());
File parentFile = file.getParentFile();
parentFile.mkdirs();
FileOutputStream fos = new FileOutputStream(file);
byte[] b = new byte[1024];
int len;
while ((len = fis.read(b, 0, b.length)) != -1) {
fos.write(b, 0, len);
}
fos.close();
fis.close();
}
}
}

public static void main(String[] args) throws Exception {
zipFile("d:/temp/folders.zip", "D:/temp/folders");//压缩入口
//unZipFile("d:/javaFile.zip","e:/");//解压入口
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: