<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 小一敗涂地 閱讀(1812) 評論(0)  編輯  收藏 所屬分類: java語言相關

    主站蜘蛛池模板: 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 国产大片免费观看中文字幕| 国产a视频精品免费观看| 亚洲黄色片免费看| 久久久久久精品免费免费自慰| 91久久青青草原线免费| 2015日韩永久免费视频播放| a拍拍男女免费看全片| 中文字幕在线观看免费视频| 亚洲精品在线免费观看| 国产曰批免费视频播放免费s| 免费观看无遮挡www的视频| 在人线av无码免费高潮喷水| 亚洲欧洲日产国码www| 亚洲精品成人图区| 国产成人精品日本亚洲11| 亚洲欧洲无码一区二区三区| 亚洲AV色无码乱码在线观看| 午夜成人无码福利免费视频| 波多野结衣免费一区视频 | 国产高潮流白浆喷水免费A片 | 亚洲一卡2卡4卡5卡6卡在线99| 亚洲三级视频在线观看| 亚洲色偷偷综合亚洲AV伊人蜜桃 | 777亚洲精品乱码久久久久久| 91亚洲性爱在线视频| 亚洲日本在线电影| 人妻18毛片a级毛片免费看| 日本三级在线观看免费| 毛片免费全部播放无码| 女人被男人桶得好爽免费视频| 国产乱弄免费视频| 亚洲精品乱码久久久久久中文字幕| 亚洲网站在线免费观看| 亚洲精品乱码久久久久久V| 成人国产网站v片免费观看| 无码人妻精品中文字幕免费| 野花高清在线电影观看免费视频| 免费在线观看日韩| 亚洲人成电影福利在线播放 | 亚洲免费福利视频|