📄 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 + -