posts - 22,comments - 35,trackbacks - 0

          ?

          ?1 package ?util;
          ?2
          ?3 /* 本實例采用遞歸的方法,把指定的目錄(包括子目錄)壓縮成一個ZIP文件。
          ?4 原理是:為指定目錄的所有文件創建一個ZipEntry(壓縮流入口),然后把文件寫進去;當遇到子目錄時,調用遞歸函數,把它壓縮成另一個zip文件,當作一般文件寫進去.
          ?5 //使用方法?java?Zip?<目錄名>
          ?6 */

          ?7
          ?8 // java.util.zip包提供了數據壓縮和解壓縮的類
          ?9 import ?java.io. * ;
          10 import ?java.util.zip. * ;
          11
          12
          13 public ? class ?FileZip {
          14 ????
          15 ???? static ? final ? int ?BUFFER = 2048 ;?
          16 ???? static ? boolean ?flag = false ;
          17 ????
          18 ???? public ? static ? void ?main(String?args[]) throws ?IOException {
          19 ????????File?file = new ?File(args[ 0 ]);
          20 ????????FileInputStream?file1 = new ?FileInputStream(ZipSubdirectory(file));
          21 ????}

          22 ????
          23 ???? // ZipSubdirectory函數將一個指定目錄(包括它子目錄)壓縮成一個同名壓縮文件(這里稱為"ORIGIN")
          24 ???? public ? static ?File?ZipSubdirectory(File?myDir) throws ?IOException {
          25 ???? // 創建緩沖輸入流BufferedInputStream?
          26 ????BufferedInputStream?origin = null ;
          27 ???? // 創建ZipOutputStream對象,將向它傳遞希望寫入文件的輸出流
          28 ????File?zipFile = new ?File(myDir.getName() + " .zip " );
          29 ????FileOutputStream?fos = new ?FileOutputStream(zipFile);
          30 ????ZipOutputStream?out = new ?ZipOutputStream( new ?BufferedOutputStream(fos,BUFFER));
          31 ???? // dirContents[]獲取當前目錄(myDir)所有文件對象(包括子目錄名)
          32 ????File?dirContents[] = myDir.listFiles();
          33 ???? // 創建臨時文件tempFile,使用后刪除
          34 ????File?tempFile = null ;?
          35 ???? try {
          36 ???????? // 處理當前目錄所有文件對象,包括子目錄
          37 ???????? for ( int ?i = 0 ;i < dirContents.length;i ++ ) {
          38 ???????????? // 使用遞歸方法將當前目錄的子目錄轉成一個ZIP文件,并作為一個ENTRY加進"ORIGIN"?
          39 ???????????? if (dirContents[i].isDirectory()) {
          40 ????????????????tempFile = ZipSubdirectory(dirContents[i]);
          41 ????????????????flag = true ;
          42 ????????????}

          43 ???????????? // 如果當前文件不是子目錄
          44 ???????????? else {
          45 ????????????????tempFile = dirContents[i];
          46 ???????????????? // flag標記tempFile是否由子目錄壓縮成的ZIP文件
          47 ????????????????flag = false ;
          48 ????????????}

          49 ????????????
          50 ????????????System.out.println( " Compress?file:? " + tempFile.getName());
          51 ????????????
          52 ????????????FileInputStream?fis = new ?FileInputStream(tempFile);
          53 ????????????origin = new ?BufferedInputStream(fis,BUFFER);
          54 ???????????? // 為被讀取的文件創建壓縮條目
          55 ????????????ZipEntry?entry = new ?ZipEntry(tempFile.getName());
          56 ???????????? byte ?data[] = new ? byte [BUFFER];
          57 ???????????? int ?count;
          58 ???????????? // 在向ZIP輸出流寫入數據之前,必須首先使用out.putNextEntry(entry);?方法安置壓縮條目對象?
          59 ????????????out.putNextEntry(entry);
          60 ????????????
          61 ???????????? // 向ZIP?文件寫入數據?
          62 ???????????? while ((count = origin.read(data, 0 ,BUFFER)) !=- 1 ) {
          63 ????????????????out.write(data, 0 ,count);
          64 ????????????}

          65 ????????????
          66 ???????????? // tempFile是臨時生成的ZIP文件,刪除它
          67 ???????????? if (flag == true ) {
          68 ????????????????flag = tempFile.delete();
          69 ????????????????System.out.println( " Delete?file: " + tempFile.getName() + flag);?
          70 ????????????}
          ?
          71 ???????????? // 關閉輸入流?
          72 ????????????origin.close();?
          73 ????????}

          74 ????????out.close();
          75 ????}

          76 ???? catch (Exception?e) {System.out.println(e);
          77 ????}

          78 ???? // 遞歸返回?
          79 ???? return ?zipFile;?
          80 ????}

          81 }

          82
          posted on 2006-04-21 17:11 kelven 閱讀(1042) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 辽阳市| 兴海县| 兴文县| 寿阳县| 旅游| 满城县| 东安县| 清河县| 汕头市| 栾川县| 万全县| 贵溪市| 平安县| 宁都县| 绍兴市| 陆川县| 瑞丽市| 吉木萨尔县| 永丰县| 平潭县| 建湖县| 阜南县| 桐庐县| 轮台县| 乐山市| 曲松县| 双桥区| 安福县| 曲麻莱县| 民勤县| 大悟县| 新郑市| 兴和县| 凤凰县| 正镶白旗| 彭山县| 开阳县| 右玉县| 南溪县| 宜宾县| 思茅市|