<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 0, 文章 - 264, 評論 - 170, 引用 - 0
    數據加載中……

    用Java實現ZIP壓縮文件和目錄程序代碼(注:轉載于http://www.javaweb.cc/language/java/222365.shtml)

    用Java實現zip壓縮文件和目錄程序代碼

    今天寫了個用java壓縮的功能,可以實現對文件和目錄的壓縮。

    由于java.util.zip.ZipOutputStream有中文亂碼問題,所以采用org.apache.tools.zip.ZipOutputStream。
    以下是代碼:
    Java代碼
    package net.szh.zip;

    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.tools.zip.ZipEntry;
    import org.apache.tools.zip.ZipOutputStream;

    public class ZipCompressor {
    static final int BUFFER = 8192;

    private File zipFile;

    public ZipCompressor(String pathName) {
    zipFile = new File(pathName);
    }

    public void compress(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 = "";
    compress(file, out, basedir);
    out.close();
    } catch (Exception e) {
    throw new RuntimeException(e);
    }
    }

    private void compress(File file, ZipOutputStream out, String basedir) {
    /* 判斷是目錄還是文件 */
    if (file.isDirectory()) {
    System.out.println("壓縮:" + basedir + file.getName());
    this.compressDirectory(file, out, basedir);
    } else {
    System.out.println("壓縮:" + basedir + file.getName());
    this.compressFile(file, out, 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++) {
    /* 遞歸 */
    compress(files[i], out, basedir + dir.getName() + "/");
    }
    }

    /** 壓縮一個文件 */
    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);
    }
    }
    }

    package net.szh.zip;

    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.tools.zip.ZipEntry;
    import org.apache.tools.zip.ZipOutputStream;

    public class ZipCompressor {
    static final int BUFFER = 8192;

    private File zipFile;

    public ZipCompressor(String pathName) {
    zipFile = new File(pathName);
    }

    public void compress(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 = "";
    compress(file, out, basedir);
    out.close();
    } catch (Exception e) {
    throw new RuntimeException(e);
    }
    }

    private void compress(File file, ZipOutputStream out, String basedir) {
    /* 判斷是目錄還是文件 */
    if (file.isDirectory()) {
    System.out.println("壓縮:" + basedir + file.getName());
    this.compressDirectory(file, out, basedir);
    } else {
    System.out.println("壓縮:" + basedir + file.getName());
    this.compressFile(file, out, 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++) {
    /* 遞歸 */
    compress(files[i], out, basedir + dir.getName() + "/");
    }
    }

    /** 壓縮一個文件 */
    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來實現,更加簡單。
    Java代碼
    package net.szh.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;

    public class ZipCompressorByAnt {

    private File zipFile;

    public ZipCompressorByAnt(String pathName) {
    zipFile = new File(pathName);
    }

    public void compress(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();
    }
    }

    package net.szh.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;

    public class ZipCompressorByAnt {

    private File zipFile;

    public ZipCompressorByAnt(String pathName) {
    zipFile = new File(pathName);
    }

    public void compress(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");
    }
    }
     


    posted on 2010-12-06 17:13 小一敗涂地 閱讀(1819) 評論(0)  編輯  收藏 所屬分類: java語言相關

    主站蜘蛛池模板: 日韩亚洲一区二区三区| 一级毛片免费在线播放| 自拍偷自拍亚洲精品被多人伦好爽| 全免费a级毛片免费看| 久久精品国产亚洲AV未满十八| 内射干少妇亚洲69XXX| 可以免费观看一级毛片黄a | 免费看一区二区三区四区| 精品久久久久久亚洲中文字幕| 亚洲高清视频免费| 亚洲人成网77777色在线播放| 国产精品自在自线免费观看| 国产91免费视频| 99久久久国产精品免费蜜臀| CAOPORN国产精品免费视频| 激情婷婷成人亚洲综合| 亚洲一级毛片免费观看| 亚洲精选在线观看| 亚洲大成色www永久网站| 亚洲精品第一国产综合境外资源| 青青草国产免费久久久91| 青青青免费国产在线视频小草| 99re免费99re在线视频手机版| 韩日电影在线播放免费版| v片免费在线观看| 极品美女一级毛片免费| 另类图片亚洲校园小说区| 激情亚洲一区国产精品| 亚洲国产成人91精品| 亚洲精品午夜久久久伊人| 亚洲网址在线观看你懂的| 亚洲国产无套无码av电影| 久久久久久久亚洲精品| 亚洲色偷偷狠狠综合网| 亚洲免费无码在线| 亚洲午夜福利精品无码| 国产性爱在线观看亚洲黄色一级片| 亚洲第一区精品日韩在线播放| 亚洲成a人在线看天堂无码| 亚洲国产av无码精品| 国产亚洲精品免费视频播放|