java实现zip压缩文件/文件夹
2013-05-02 12:23
806 查看
由于java.util.zip.ZipOutputStream有中文乱码问题,所以采用org.apache.tools.zip.ZipOutputStream。
以下是代码:
后来发现原来可以用ant中的org.apache.tools.ant.taskdefs.Zip来实现,更加简单。
测试一下
Java代码
package net.szh.zip;
public class TestZip {
public static void main(String[] args) {
ZipCompressor zc = new ZipCompressor("E:\\szhzip.zip");
zc.compress("E:\\test");
ZipCompressorByAnt zca = new ZipCompressorByAnt("E:\\szhzipant.zip");
zca.compress("E:\\test");
}
}
参考自:ITeye
以下是代码:
import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.CRC32; import java.util.zip.CheckedOutputStream; import org.apache.log4j.Logger; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipOutputStream; /** * @ClassName: ZipCompressor * @CreateTime Apr 28, 2013 1:12:16 PM * @author : Mayi * @Description: 压缩文件的通用工具类-采用org.apache.tools.zip.ZipOutputStream实现,较复杂。 * */ public class ZipCompressor { private Logger logger = Logger.getLogger(ZipCompressor.class); static final int BUFFER = 8192; private File zipFile; /** * 压缩文件构造函数 * @param pathName 压缩的文件存放目录 */ public ZipCompressor(String pathName) { zipFile = new File(pathName); } /** * 执行压缩操作 * @param srcPathName 被压缩的文件/文件夹 */ public void compressExe(String srcPathName) { File file = new File(srcPathName); if (!file.exists()){ throw new RuntimeException(srcPathName + "不存在!"); } try { FileOutputStream fileOutputStream = new FileOutputStream(zipFile); CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,new CRC32()); ZipOutputStream out = new ZipOutputStream(cos); String basedir = ""; compressByType(file, out, basedir); out.close(); } catch (Exception e) { e.printStackTrace(); logger.error("执行压缩操作时发生异常:"+e); throw new RuntimeException(e); } } /** * 判断是目录还是文件,根据类型(文件/文件夹)执行不同的压缩方法 * @param file * @param out * @param basedir */ private void compressByType(File file, ZipOutputStream out, String basedir) { /* 判断是目录还是文件 */ if (file.isDirectory()) { logger.info("压缩:" + basedir + file.getName()); this.compressDirectory(file, out, basedir); } else { logger.info("压缩:" + basedir + file.getName()); this.compressFile(file, out, basedir); } } /** * 压缩一个目录 * @param dir * @param out * @param basedir */ private void compressDirectory(File dir, ZipOutputStream out, String basedir) { if (!dir.exists()){ return; } File[] files = dir.listFiles(); for (int i = 0; i < files.length; i++) { /* 递归 */ compressByType(files[i], out, basedir + dir.getName() + "/"); } } /** * 压缩一个文件 * @param file * @param out * @param basedir */ private void compressFile(File file, ZipOutputStream out, String basedir) { if (!file.exists()) { return; } try { BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); ZipEntry entry = new ZipEntry(basedir + file.getName()); out.putNextEntry(entry); int count; byte data[] = new byte[BUFFER]; while ((count = bis.read(data, 0, BUFFER)) != -1) { out.write(data, 0, count); } bis.close(); } catch (Exception e) { throw new RuntimeException(e); } } }
后来发现原来可以用ant中的org.apache.tools.ant.taskdefs.Zip来实现,更加简单。
import java.io.File; import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.Zip; import org.apache.tools.ant.types.FileSet; /** * @ClassName: ZipCompressorByAnt * @CreateTime Apr 28, 2013 1:23:45 PM * @author : Mayi * @Description: 压缩文件的通用工具类-采用ant中的org.apache.tools.ant.taskdefs.Zip来实现,更加简单。 * */ public class ZipCompressorByAnt { private File zipFile; /** * 压缩文件构造函数 * @param pathName 最终压缩生成的压缩文件:目录+压缩文件名.zip */ public ZipCompressorByAnt(String finalFile) { zipFile = new File(finalFile); } /** * 执行压缩操作 * @param srcPathName 需要被压缩的文件/文件夹 */ public void compressExe(String srcPathName) { File srcdir = new File(srcPathName); if (!srcdir.exists()){ throw new RuntimeException(srcPathName + "不存在!"); } Project prj = new Project(); Zip zip = new Zip(); zip.setProject(prj); zip.setDestFile(zipFile); FileSet fileSet = new FileSet(); fileSet.setProject(prj); fileSet.setDir(srcdir); //fileSet.setIncludes("**/*.java"); //包括哪些文件或文件夹 eg:zip.setIncludes("*.java"); //fileSet.setExcludes(...); //排除哪些文件或文件夹 zip.addFileset(fileSet); zip.execute(); } }
测试一下
Java代码
package net.szh.zip;
public class TestZip {
public static void main(String[] args) {
ZipCompressor zc = new ZipCompressor("E:\\szhzip.zip");
zc.compress("E:\\test");
ZipCompressorByAnt zca = new ZipCompressorByAnt("E:\\szhzipant.zip");
zca.compress("E:\\test");
}
}
参考自:ITeye
相关文章推荐
- JAVA实现把指定文件夹下的所有文件压缩成zip包
- JAVA实现把指定文件夹下的所有文件压缩成zip包
- Java实现将文件或者文件夹压缩成zip
- java web 实现把文件夹下的所有文件压缩成zip并实现下载(原文链接)http://blog.csdn.net/sxdtzhaoxinguo/article/details/20550537)
- java来实现zip压缩文件或者文件夹
- JAVA实现把指定文件夹下的所有文件压缩成zip包
- java实现zip压缩文件(同一文件夹下的多个文件夹打成一个zip包)
- JAVA实现把指定文件夹下的所有文件压缩成zip包
- JAVA实现把指定文件夹下的所有文件压缩成zip包
- java实现zip压缩文件/文件夹
- java实现zip压缩文件/文件夹
- java实现zip压缩文件/文件夹
- JAVA实现把指定文件夹下的所有文件压缩成zip包
- JAVA实现把指定文件夹下的所有文件压缩成zip包
- 使用Java zip包和apach 的ant包对文件、文件夹进行压缩,兼容中文
- Java处理压缩文件或文件夹相关的一些方法的实现
- java实现将多个文件打包成zip压缩文件以及对压缩文件的加密
- Java实现Zip压缩文件并可以下载
- java实现zip文件压缩,解压
- java实现zip压缩文件 (一)