Java 的壓縮解壓縮

朋友問起我關於 Java的壓縮與解壓縮, 始終在中文那邊都是亂碼,
今天仔細看了一下, 才發現, 原來是 java.util.zip 的 Bug….到不是他的語法有錯,
而是他只允許 Unicode , 這就不妙了…因為還有Microsoft 是採用 Big5, GB,JP….Code
網路上一致的解法就是採用 ant.jar
因此順手寫了一個 壓縮解壓縮的 程式…
package com.test;
import java.io.*;
import java.nio.channels.*;
import java.util.Enumeration;
import org.apache.tools.zip.*;
 
public class ZipExample {
/**
  *  Author : Arthur Fen
  */
 /**
  * Example for an pack operation
  */
 public void pack(String path, String zipName) {
  pack((new File(path)).listFiles(),zipName);
 }
 
 public void pack(File [] files, String zipName) {
  // File [] files = (new File("C:/Temp/解壓縮")).listFiles();
  try {
   ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipName));
   for (int i = 0; i < files.length; i++) {
    FileInputStream in = new FileInputStream(files[i].getAbsoluteFile());
    out.putNextEntry(new org.apache.tools.zip.ZipEntry(files[i].getName()));
    int len;
    byte[] buf = new byte[1024];
    while ((len = in.read(buf)) > 0) {
     out.write(buf, 0, len);
    }
    out.closeEntry();
    in.close();
   }
   out.close();
  } catch (IOException e) {
   System.out.println(e);
  }
 }
 /**
  * Example for an unpack operation
  */
 public void unpack(String zipName,String path) {
  try {
   ZipFile zf = new ZipFile(new File(zipName));
   Enumeration<ZipEntry> zes = zf.getEntries();
   while (zes.hasMoreElements()) {
    ZipEntry ze = zes.nextElement();
    File newFile = new File(path, ze.getName());
    ReadableByteChannel rc = Channels.newChannel(zf.getInputStream(ze));
    if (ze.isDirectory()) {
     newFile.mkdirs();
    } else {
     FileOutputStream fos = new FileOutputStream(newFile);
     FileChannel fc = fos.getChannel();
     fc.transferFrom(rc, 0, ze.getSize());
     fos.close();
    }
   }
   zf.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
 
 public static void main (String argv[]) {
  // 將 C:/Temp/要壓縮 目錄下, 全部壓到 C:/Temp/許功蓋壓縮檔.zip
  new ZipExample().pack("C:/Temp/要壓縮","C:/Temp/許功蓋壓縮檔.zip");
  // 將C:/Temp/許功蓋壓縮檔.zip 解壓縮到 C:/解壓縮目錄
  new ZipExample().unpack("C:/Temp/許功蓋壓縮檔.zip","C:/Temp/解壓縮");
 }
}
廣告

About fenjj

Perfect !!??...
本篇發表於 Uncategorized。將永久鏈結加入書籤。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s