import java.util.zip.ZipFile;
import java.util.List;
import java.io.File;
import java.util.zip.ZipEntry;
import java.util.ArrayList;
import java.util.Enumeration;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
?* <p>預覽彩信的 smil? </p>
?*
?* <p>該類是解壓 zip 文件,及獲取 smil 文件的 url </p>
?*
?* <p>Copyright: Copyright (c) 2006</p>
?*
?* <p>卓望_山東168_CMS</p>
?*
?* @author 龔椿深 2006-11-13
?* @version 1.0
?*/
public class UnZip {
??? private static Log logger = LogFactory.getLog(UnZip.class);
??? public UnZip() {
??? }
??? public static void unZipFile(String filename) {
??????? ZipEntry entry = null;
??????? InputStream in = null;
??????? BufferedOutputStream bout = null;
??????? ZipFile zip = null;
??????? try {
??????????? //創建目錄
??????????? String tagerpath = filename.substring(0, filename.lastIndexOf(".")); //獲取目錄名
??????????? File directory = new File(tagerpath);
??????????? directory.mkdirs();
??????????? File file = new File(filename);
??????????? zip = new ZipFile(file);
??????????? Enumeration save = zip.entries();
??????????? //遍歷Enumeration,進行保存操作
??????????? while (save.hasMoreElements()) {
??????????????? entry = (ZipEntry) save.nextElement();
??????????????? //當文件不為目錄時進行保存
??????????????? if (!entry.isDirectory() && !entry.getName().endsWith("zip")) {
??????????????????? //進行保存文件
??????????????????? in = zip.getInputStream(entry);
??????????????????? bout = new BufferedOutputStream(new FileOutputStream(
??????????????????????????? tagerpath + "/" + entry.getName()));
??????????????????? int rc = 0;
??????????????????? byte[] buf = new byte[102400];
??????????????????? while ((rc = in.read(buf, 0, 102400)) > 0) {
??????????????????????? bout.write(buf, 0, rc);
??????????????????? }
??????????????????? bout.flush();
??????????????? } else if (entry.getName().endsWith("zip")) {
??????????????????? //進行保存文件
//??????????????????? InputStream input = new FileInputStream();
??????????????????? in = zip.getInputStream(entry);
??????????????????? OutputStream out = new FileOutputStream(tagerpath + "/" +
??????????????????????????? entry.getName());
??????????????????? // Transfer bytes from in to out
??????????????????? byte[] buf = new byte[1024];
??????????????????? int len;
??????????????????? while ((len = in.read(buf)) > 0) {
??????????????????????? out.write(buf, 0, len);
??????????????????? }
??????????????????? in.close();
??????????????????? out.close();
??????????????? }
??????????? }
??????? } catch (Exception e) {
??????????? logger.error("解壓文件不成功!!" + e.getMessage());
??????? }
??????? //關閉文件
??????? finally {
??????????? if (bout != null) {
??????????????? try {
??????????????????? bout.close();
??????????????? } catch (IOException er) {
??????????????????? logger.error(er.getMessage());
??????????????? }
??????????? }
??????????? if (in != null) {
??????????????? try {
??????????????????? in.close();
??????????????? } catch (IOException ex) {
??????????????????? logger.error(ex.getMessage());
??????????????? }
??????????? }
??????????? if (zip != null) {
??????????????? try {
??????????????????? zip.close();
??????????????? } catch (IOException ec) {
??????????????????? logger.error(ec.getMessage());
??????????????? }
??????????? }
??????? }
??? }
??? public static List getSmilList(String tagerpath) {
??????? File filepath = null;
??????? List list = null;
??????? try {
??????????? filepath = new File(tagerpath);
??????????? list = new ArrayList();
??????????? //找出擴展名為 smil 的文件,并加入到 list
??????????? File temp[] = filepath.listFiles();
??????????? for (int i = 0; i < temp.length; i++) {
??????????????? System.out.println("abs:"+temp[i].getAbsolutePath());
??????????????? System.out.println("can:"+temp[i].getCanonicalPath());
??????????????? System.out.println("path:"+temp[i].getPath());
??????????????? System.out.println("url:"+temp[i].toURI());
??????????????? if (temp[i].getAbsolutePath().toLowerCase().endsWith("smil")) {
??????????????????? list.add(temp[i].getAbsolutePath().toString());
??????????????? }
????????????? }
??????? } catch (Exception e) {
??????????? logger.error("UnZip-->getSmilList" + e.getMessage());
??????? }
??????? return list;
??? }
//獲取文件列表
??? public static List getZipFileList(String filepath) {
??????? //定義zip中的實體
??????? ZipEntry entry = null;
??????? ZipFile zip = null;
??????? List list = new ArrayList();
??????? try {
??????????? File file = new File(filepath);
??????????? zip = new ZipFile(file);
??????????? //將zip中的每個實體放入Enumeration中
??????????? Enumeration num = zip.entries();
??????????? //遍歷Enumeration,判斷解壓文件是否已經存在
??????????? while (num.hasMoreElements()) {
??????????????? entry = (ZipEntry) num.nextElement();
??????????????? //把 smil 文件添加到列表中
??????????????? if (entry.getName().toLowerCase().endsWith("smil")) {
??????????????????? list.add(entry.getName());
??????????????? }
??????????? }
??????? } catch (Exception e) {
??????????? logger.error("解壓文件不成功!!" + e.getMessage());
??????? }
??????? return list;
??? }