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

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

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

    benbenming

    使用Java核心類庫的zip包實現壓縮/解壓文件!

        由于需要,這幾天研究了一下使用Java技術實現文件及文件夾打zip包及解zip包,使用的是java.util.zip包下的類;主要用到的是三個類,即:ZipEntry,我的理解是zip文件中壓縮的一個個子文件;ZipInputStream是zip格式的輸入流;ZipOutputStream是zip格式的輸出流;
        這方面網上也有一些例子,我也測試了相關的例子,但是在實現部分功能是有些不足,所以將代碼改造后重寫如下,現在實現的功能是對單個文件的打包及解包,對一個文件夾(文件夾內文件及文件夾不限)的打包及解包;
        使用Java核心庫的不足就是如果對中文文件夾或文件打包后,文件名或文件夾名會出現亂碼,雖然在window下可以正常的解壓,解壓后也能正常顯示中文,但是對于Unix等系統則不具有通用性;網上能找的解決方式是使用Ant包中的zip類庫,Ant重寫了ZipOutputStream類,所以對于打包后正常顯示中文沒有問題,但是還是不能動態制定壓制zip文件的編碼;

      1import java.io.File;
      2import java.io.FileInputStream;
      3import java.io.FileNotFoundException;
      4import java.io.FileOutputStream;
      5import java.io.IOException;
      6import java.util.zip.ZipEntry;
      7import java.util.zip.ZipInputStream;
      8import java.util.zip.ZipOutputStream;
      9
     10/**
     11 * 使用java核心類庫打包、解包zip文件,不足之處在于壓縮中文名的文件時,在壓縮包內中文字符是亂碼,
     12 * 在windows下解壓后編碼正常顯示中文,而其他系統下則不能正常還原;
     13 */

     14public class TestZip {
     15
     16    /**
     17     * 定義壓縮文件及目錄為zip文件的方法,重寫下面的zip方法
     18     * 
     19     * @param zipFileName
     20     * @param inputFile
     21     * @throws Exception
     22     */

     23    public void zip(String zipFileName, String inputFile) {
     24        zip(zipFileName, new File(inputFile));
     25    }

     26
     27    /**
     28     * 定義壓縮文件及目錄為zip文件的方法,重寫下面的zip方法
     29     * 
     30     * @param zipFileName
     31     * @param inputFile
     32     * @throws Exception
     33     */

     34    public void zip(String zipFileName, File inputFile) {
     35        try {
     36            ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
     37                    zipFileName));
     38            zip(out, inputFile, inputFile.getName());
     39            System.out.println("zip done");
     40            out.close();
     41        }

     42        catch (FileNotFoundException e) {
     43            // TODO 自動生成 catch 塊
     44            e.printStackTrace();
     45        }

     46        catch (IOException e) {
     47            // TODO 自動生成 catch 塊
     48            e.printStackTrace();
     49        }

     50    }

     51
     52    /**
     53     * 定義壓縮文件及目錄為zip文件的方法
     54     * 
     55     * @param out
     56     * @param f
     57     * @param base
     58     * @throws Exception
     59     */

     60    public void zip(ZipOutputStream out, File f, String base) {
     61        try {
     62            System.out.println("Zipping " + f.getName());
     63            //判斷File是否為目錄
     64            if (f.isDirectory()) {
     65                System.out.println("Read Directory !");
     66                //獲取f目錄下所有文件及目錄,作為一個File數組返回
     67                File[] fl = f.listFiles();
     68                out.putNextEntry(new ZipEntry(base + "/"));
     69                base = base.length() == 0 ? "" : base + "/";
     70                for (int i = 0; i < fl.length; i++{
     71                    zip(out, fl[i], base + fl[i].getName());
     72                }

     73            }

     74            else {
     75                System.out.println("Read File !");
     76                out.putNextEntry(new ZipEntry(base));
     77                FileInputStream in = new FileInputStream(f);
     78                int b;
     79                System.out.println("base " + base);
     80                while ((b = in.read()) != -1{
     81                    //                    System.out.println("File reading");
     82                    out.write(b);
     83                }

     84                in.close();
     85            }

     86        }

     87        catch (FileNotFoundException e) {
     88            // TODO 自動生成 catch 塊
     89            e.printStackTrace();
     90        }

     91        catch (IOException e) {
     92            // TODO 自動生成 catch 塊
     93            e.printStackTrace();
     94        }

     95    }

     96
     97    /**
     98     * 定義解壓縮zip文件的方法
     99     * 
    100     * @param zipFileName
    101     * @param outputDirectory
    102     */

    103    public void unzip(String zipFileName, String outputDirectory) {
    104        try {
    105            ZipInputStream in = new ZipInputStream(new FileInputStream(
    106                    zipFileName));
    107            //獲取ZipInputStream中的ZipEntry條目,一個zip文件中可能包含多個ZipEntry,
    108            //當getNextEntry方法的返回值為null,則代表ZipInputStream中沒有下一個ZipEntry,
    109            //輸入流讀取完成;
    110            ZipEntry z = in.getNextEntry();
    111            while (z != null{
    112                System.out.println("unziping " + z.getName());
    113                //創建以zip包文件名為目錄名的根目錄
    114                File f = new File(outputDirectory);
    115                f.mkdir();
    116                if (z.isDirectory()) {
    117                    String name = z.getName();
    118                    name = name.substring(0, name.length() - 1);
    119//                    System.out.println("name " + name);
    120                    f = new File(outputDirectory + File.separator + name);
    121                    f.mkdir();
    122//                    System.out.println("mkdir " + outputDirectory
    123//                            + File.separator + name);
    124                }

    125                else {
    126                    f = new File(outputDirectory + File.separator + z.getName());
    127                    f.createNewFile();
    128                    FileOutputStream out = new FileOutputStream(f);
    129                    int b;
    130                    while ((b = in.read()) != -1{
    131                        out.write(b);
    132                    }

    133                    out.close();
    134                }

    135                //讀取下一個ZipEntry
    136                z = in.getNextEntry();
    137            }

    138            in.close();
    139        }

    140        catch (FileNotFoundException e) {
    141            // TODO 自動生成 catch 塊
    142            e.printStackTrace();
    143        }

    144        catch (IOException e) {
    145            // TODO 自動生成 catch 塊
    146            e.printStackTrace();
    147        }

    148    }

    149
    150    public static void main(String[] args) {
    151        TestZip t = new TestZip();
    152//        t.zip("c:\\test11.zip", "c:\\test1");
    153//        t.zip("c:\\test2.zip", "c:\\php");
    154        t.unzip("c:\\test11.zip""c:\\test11");
    155        //如果此處不指定解壓的具體目錄,如:test2,那么則直接解壓到根目錄下
    156//        t.unzip("c:\\test2.zip", "c:\\test2");
    157    }

    158}

    posted on 2006-01-19 00:24 benbenming 閱讀(2778) 評論(0)  編輯  收藏 所屬分類: Java基礎


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲精品一卡2卡3卡三卡四卡| 亚洲日韩VA无码中文字幕| 无码久久精品国产亚洲Av影片| 中国一级毛片视频免费看| 伊人久久亚洲综合| 成人无码a级毛片免费| 亚洲av无码一区二区三区不卡| 免费播放一区二区三区| 亚洲欧洲日韩在线电影| 中文字幕无码不卡免费视频| 亚洲熟妇无码av另类vr影视| 四虎在线免费播放| 成年大片免费视频播放一级 | 亚洲AV一区二区三区四区| 午夜一级免费视频| 极品美女一级毛片免费| 中文字幕日韩亚洲| 91短视频在线免费观看| 亚洲中文久久精品无码1| 日韩高清在线高清免费| 一级毛片在线完整免费观看| 亚洲AV无码不卡在线播放| av无码久久久久不卡免费网站| 亚洲日本中文字幕天天更新| 亚洲成av人片在线观看天堂无码| 中国在线观看免费的www| 亚洲精品无码久久久久久久 | 亚洲国产精品日韩av不卡在线 | 亚洲国产精品成人一区| 久久er国产精品免费观看2| 亚洲沟沟美女亚洲沟沟| 免费国产精品视频| 日韩精品人妻系列无码专区免费 | 99热这里有免费国产精品| 亚洲第一成年网站视频 | 亚洲成人在线免费观看| 免费人成视频在线观看视频 | 在线观看人成网站深夜免费| 无遮挡国产高潮视频免费观看 | 国产做床爱无遮挡免费视频| 日本一道本不卡免费|