六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 61|回复: 0

解压缩工具类

[复制链接]

升级  0.67%

11

主题

11

主题

11

主题

秀才

Rank: 2

积分
51
 楼主| 发表于 2013-1-15 02:24:42 | 显示全部楼层 |阅读模式
import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.Enumeration;import java.util.List;import java.util.zip.ZipEntry;import java.util.zip.ZipFile;import java.util.zip.ZipOutputStream;/** *  * @author lijunjie * 用于解压缩文件和文件夹 * */public class ZipUtil {public static void main(String args[]){try{ZipUtil ziputil = new ZipUtil();ziputil.zipFile("c:\\abc", "c:\\abc.zip");ziputil.upZipFile("c:\\abc.zip", "c:\\aaa");}catch(Exception e){e.printStackTrace();}}public static final int BUFFER = 1024;// 缓存大小/** * zip压缩功能. 压缩baseDir(文件夹目录)下所有文件,包括子目录 * @param baseDir * @param fileName * @throws Exception */public static void zipFile(String baseDir, String fileName)throws Exception {List fileList = getSubFiles(new File(baseDir));ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(fileName));ZipEntry ze = null;byte[] buf = new byte[BUFFER];int readLen = 0;for (int i = 0; i < fileList.size(); i++) {File f = (File) fileList.get(i);ze = new ZipEntry(getAbsFileName(baseDir, f)); ze.setSize(f.length());ze.setTime(f.lastModified());zos.putNextEntry(ze);InputStream is = new BufferedInputStream(new FileInputStream(f));while ((readLen = is.read(buf, 0, BUFFER)) != -1) {zos.write(buf, 0, readLen);}is.close();}zos.close();}/** * 给定根目录,返回另一个文件名的相对路径,用于zip文件中的路径. * @param baseDir 根目录 * @param realFileName 实际的文件名 * @return */private static String getAbsFileName(String baseDir, File realFileName) {File real = realFileName;File base = new File(baseDir);String ret = real.getName();while (true) {real = real.getParentFile();if (real == null)break;if (real.equals(base))break;elseret = real.getName() + "/" + ret;}return ret;}/** * 取得指定目录下的所有文件列表,包括子目录. * @param baseDir File 指定的目录 * @return 包含java.io.File的List */private static List getSubFiles(File baseDir) {List ret = new ArrayList();File[] tmp = baseDir.listFiles();for (int i = 0; i < tmp.length; i++) {if (tmp[i].isFile())ret.add(tmp[i]);if (tmp[i].isDirectory())ret.addAll(getSubFiles(tmp[i]));}return ret;}/** * 解压缩功能. 将ZIP_FILENAME文件解压到ZIP_DIR目录下. * @param zipFileName * @param unZipDir * @throws Exception */public static void upZipFile(String zipFileName,String unZipDir) throws Exception {ZipFile zfile = new ZipFile(zipFileName);Enumeration zList = zfile.entries();ZipEntry ze = null;byte[] buf = new byte[1024];while (zList.hasMoreElements()) {ze = (ZipEntry) zList.nextElement();if (ze.isDirectory()) {File f = new File(unZipDir + ze.getName());f.mkdir();continue;}OutputStream os = new BufferedOutputStream(new FileOutputStream(getRealFileName(unZipDir, ze.getName())));InputStream is = new BufferedInputStream(zfile.getInputStream(ze));int readLen = 0;while ((readLen = is.read(buf, 0, 1024)) != -1) {os.write(buf, 0, readLen);}is.close();os.close();}zfile.close();}/** * 给定根目录,返回一个相对路径所对应的实际文件名. * @param baseDir 指定根目录 * @param absFileName 实际的文件 * @return */public static File getRealFileName(String baseDir, String absFileName) {String[] dirs = absFileName.split("/");File ret = new File(baseDir);if (dirs.length > 1) {for (int i = 0; i < dirs.length - 1; i++) {ret = new File(ret, dirs[i]);}if (!ret.exists())ret.mkdirs();ret = new File(ret, dirs[dirs.length - 1]);return ret;}return ret;}} 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表