<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基礎


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


    網站導航:
     
    主站蜘蛛池模板: 色老头永久免费网站| 久久亚洲免费视频| 日韩成人免费aa在线看| 亚洲三级视频在线| 69天堂人成无码麻豆免费视频| 久久精品国产精品亚洲毛片| 精品无码AV无码免费专区| 亚洲伊人久久大香线蕉苏妲己| 鲁大师在线影院免费观看| 亚洲精品人成电影网| 精品无码AV无码免费专区 | 成年女人男人免费视频播放| 亚洲videosbestsex日本| 猫咪社区免费资源在线观看| 亚洲大码熟女在线观看| 免费在线观看黄网| 黄桃AV无码免费一区二区三区| 国产精品久久久亚洲| 中文字幕免费视频一| 亚洲五月综合缴情婷婷| 麻豆成人精品国产免费| 牛牛在线精品免费视频观看| 亚洲精品白浆高清久久久久久| 日日麻批免费40分钟无码| 亚洲国产精品午夜电影| 国产精品久免费的黄网站| 国产免费伦精品一区二区三区| 内射少妇36P亚洲区| 在线免费观看a级片| 日韩在线视频免费| 亚洲av无码精品网站| 性xxxxx免费视频播放| 在线观看亚洲视频| 亚洲VA中文字幕不卡无码| 嫖丰满老熟妇AAAA片免费看| 亚洲AV无码一区二区大桥未久| 超清首页国产亚洲丝袜| 男女做羞羞的事视频免费观看无遮挡| 色偷偷噜噜噜亚洲男人| 亚洲av无码国产精品色午夜字幕| 成年性羞羞视频免费观看无限|