?? ziptoolkit.java
字號:
/* * @(#) ZipToolkit.java * Copyright 2004 HWStudio. All rights reserved. */package hws.item.smart.utility.share;//導入核心Java類庫import java.io.File;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.net.URL;import java.net.MalformedURLException;import java.util.List;import java.util.ArrayList;import java.util.StringTokenizer;import java.util.zip.ZipFile;import java.util.zip.ZipEntry;import java.util.zip.ZipException;import java.util.zip.ZipInputStream;import java.util.zip.ZipOutputStream;//導入自定義Java類庫import hws.item.smart.misc.XMLConfig;/** * Zip文件工具箱 * * @version 0.1 2005-08-27 * @author Hwerz */public class ZipToolkit extends Object { /*------------------------------------------------------------------------* * 屬性定義 * *------------------------------------------------------------------------*/ /** * 臨時路徑 */ private static final String WORKING_DIR = "c:\\working"; /** * 分隔符 */ private static final String DELIMITER1 = "/"; /** * 分隔符 */ private static final String DELIMITER2 = "\\"; /** * 緩沖區大小 */ private static final int BUFFER_SIZE = 10 * 1024; /** * 該類自身的一個靜態引用 */ private static ZipToolkit toolkit; /** * 壓縮文件的文件名 */ private String fileName; /** * 暫存被壓縮文件的父目錄 */ private String parentDir; /** * 存放壓縮文件中實體 */ private List entries; /*------------------------------------------------------------------------* * 構造函數 * *------------------------------------------------------------------------*/ /** * 構造函數為私有,這樣在整個運行過程中該類就只能有一個實例 */ private ZipToolkit() { super(); fileName = null; parentDir = null; entries = new ArrayList(); } /*------------------------------------------------------------------------* * 公共方法 * *------------------------------------------------------------------------*/ /** * 對該類提供的一個全局訪問點,用來實例化該對象 * * @return 該類唯一的一個實例 */ public static ZipToolkit getInstance() { if (toolkit == null) { toolkit = new ZipToolkit(); } return toolkit; } /** * 判斷默認的Zip文件是否為空,如果為空則返回true,否則返回false * * @return 如果默認的Zip文件為空則返回true,否則返回false */ public static boolean isDefaultZipFileNull() { boolean isNull; try { ZipFile zipFile = new ZipFile(XMLConfig.getUploadFile()); isNull = !zipFile.entries().hasMoreElements(); } catch (IOException e) { isNull = true; } return isNull; } /** * 返回壓縮文件中的所有實體 * * @return 壓縮文件中的所有實體 */ public List getEntries() { return entries; } /** * 比較兩個實體的大小。規則是目錄比文件小,如果類型一致則按字母表順序比較 * * @param entry1 第一個實體 * @param entry2 第二個實體 * @return 如果第一個實體大則返回1;如果兩者相等則返回0;否則返回-1 */ public int compare(ZipEntry entry1, ZipEntry entry2) { int result; if (entry1.isDirectory() && entry2.isDirectory() == false) { result = -1; } else if (entry1.isDirectory() == false && entry2.isDirectory()) { result = 1; } else { result = entry1.getName().compareTo(entry2.getName()); } return result; } /** * 返回指定實體的短名稱 * * @param entry 指定的實體 * @return 指定實體的短名稱 */ public String getShortName(ZipEntry entry) { String name = entry.getName(); if (entry.isDirectory() == true) { name = name.substring(0, name.length() - 1); } int index = name.lastIndexOf(DELIMITER1); name = name.substring(index + 1, name.length()); return name; } /** * 打開文件 * * @param file 待打開的Zip文件 */ public void openFile(File file) { if (file.exists() == false) { newFile(file.getPath()); } else { entries.clear(); fileName = file.getPath(); } try { InputStream fis = new FileInputStream(file); InputStream bis = new BufferedInputStream(fis); ZipInputStream zis = new ZipInputStream(bis); ZipEntry entry = null; while ((entry = zis.getNextEntry()) != null) { entries.add(entry); } zis.close(); bis.close(); fis.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 新建目錄 * * @param entry 待新建目錄的位置 * @param name 待新建目錄的名稱 */ public void newDirectory(ZipEntry entry, String name) { File file = new File(WORKING_DIR); if (entries.size() > 0) { extractFile(file, entries.toArray(), null); } else { file.mkdir(); } StringBuffer buffer = new StringBuffer(); buffer.append(file.getAbsolutePath()); if (entry == null) { buffer.append(DELIMITER2); buffer.append(name); buffer.append(DELIMITER2); } else { StringTokenizer st = new StringTokenizer(entry.getName(), DELIMITER1); while (st.hasMoreTokens()) { buffer.append(DELIMITER2); buffer.append(st.nextToken()); } buffer.append(DELIMITER2); buffer.append(name); buffer.append(DELIMITER2); } (new File(buffer.toString())).mkdir(); rewriteFile(file.listFiles()); deleteFile(file); } /** * 添加文件 * * @param entry 待添加文件的位置 * @param file 待添加的文件 */ public void addFile(ZipEntry entry, File file) { File file2 = new File(WORKING_DIR); if (entries.size() > 0) { extractFile(file2, entries.toArray(), null); } else { file2.mkdir(); } StringBuffer buffer = new StringBuffer(); buffer.append(file2.getAbsolutePath()); if (entry == null) { buffer.append(DELIMITER2); buffer.append(file.getName()); } else { StringTokenizer st = new StringTokenizer(entry.getName(), DELIMITER1); while (st.hasMoreTokens()) { buffer.append(DELIMITER2); buffer.append(st.nextToken()); } buffer.append(DELIMITER2); buffer.append(file.getName()); } copyFile(file, new File(buffer.toString())); rewriteFile(file2.listFiles()); deleteFile(file2); } /** * 刪除文件或者目錄 * * @param entry 待刪除的文件或者目錄所對應的實體 */ public void deleteFile(ZipEntry entry) { File file = new File(WORKING_DIR); extractFile(file, entries.toArray(), null); StringBuffer buffer = new StringBuffer(); buffer.append(file.getAbsolutePath()); StringTokenizer st = new StringTokenizer(entry.getName(), DELIMITER1); while (st.hasMoreTokens()) { buffer.append(DELIMITER2);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -