您的位置:首页 > 编程语言 > Java开发

java文件压缩

2014-06-06 00:00 232 查看
使用java基本的zip库可以进行压缩,但是不支持中文文件名,会出现乱码,这里使用apache tools下的ant.jar可以解决这个问题。

压缩工具类ZipUtil代码:

package com.home;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.zip.Adler32;
import java.util.zip.CheckedOutputStream;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
public class ZipUtil {
/**
* 提供给外部压缩调用
*
* @param src
* @param des
* @throws IOException
*/
public static void zip(String src, String des) throws IOException {
ZipOutputStream out = null;
try {
CheckedOutputStream cos = new CheckedOutputStream(
new FileOutputStream(des), new Adler32());
out = new ZipOutputStream(new BufferedOutputStream(cos));
out.setEncoding("GBK");
zip(new File(src), out, "");
} finally {
if (out != null) {
out.close();
}
}
}
/**
* 压缩文件
*
* @param file
* @param out
* @param base
* @throws IOException
*/
private static void zip(File file, ZipOutputStream out, String base)
throws IOException {
if (file.isFile()) {
if (base.length() > 0) {
out.putNextEntry(new ZipEntry(base));
} else {
out.putNextEntry(new ZipEntry(file.getName()));
}
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(file), "ISO8859_1"));
int len;
while ((len = br.read()) != -1) {
out.write(len);
}
br.close();
} else if (file.isDirectory()) {
File[] subFiles = file.listFiles();
out.putNextEntry(new ZipEntry(base + File.separator));
base = base.length() != 0 ? base + File.separator : "";
if (subFiles != null) {
for (File subFile : subFiles) {
zip(subFile, out, base + subFile.getName());
}
}
}
}
}

测试类Test:

package com.home;
public class Test {
/** 源文件夹路径 */
private String folderSrcPath = "D://test//测试文件夹";
/** 压缩后的zip文件存放路劲 */
private String forderDesPath = "D://test//test1.zip";
/** 源文件路径 */
private String fileSrcPath = "D://test//测试.pdf";
/** 压缩后的zip文件存放路劲 */
private String fileDesPath = "D://test//test.zip";
public Test() {
try {
ZipUtil.zip(folderSrcPath, forderDesPath);
ZipUtil.zip(fileSrcPath, fileDesPath);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new Test();
}
}

点击下载ant.jar
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 文件压缩