WEB开发网
开发学院软件开发Java Zip文件压缩 阅读

Zip文件压缩

 2012-05-25 11:07:06 来源:WEB开发网   
核心提示:public class ZipFileUtil {private final static int BUFFER=2048; /** * 解压zip文件 * * @param zipFilePath * zip文件绝对路径 * @param unzipDirectory *
public class ZipFileUtil {
	private final static int BUFFER=2048;
	 /**
	  * 解压zip文件
	  * 
	  * @param zipFilePath
	  *            zip文件绝对路径
	  * @param unzipDirectory
	  *            解压到的目录
	  * @throws Exception
	  */

	 @SuppressWarnings("unchecked")
	public static boolean unzip(String zipFilePath, String unzipDirectory)
	 throws Exception {
		 boolean flag=true;
		 try{
		  // 创建文件对象
		  File file = new File(zipFilePath);
		  // 创建zip文件对象
		  ZipFile zipFile = new ZipFile(file);
		  // 创建本zip文件解压目录
		  File unzipFile = new File(unzipDirectory + "/"
		    + getSuffixName(file.getName()));
		  if (unzipFile.exists())
		   unzipFile.delete();
		  unzipFile.mkdir();
		  // 得到zip文件条目枚举对象
		  Enumeration zipEnum = zipFile.getEntries();
		  // 定义输入输出流对象
		  InputStream input = null;
		  OutputStream output = null;
		  // 定义对象
		  ZipEntry entry = null;
		  // 循环读取条目
		  while (zipEnum.hasMoreElements()) {
		   // 得到当前条目
		   entry = (ZipEntry) zipEnum.nextElement();
		   String entryName = new String(entry.getName());
		   // 用/分隔条目名称
		   String names[] = entryName.split("\\/");
		   int length = names.length;
		   String path = unzipFile.getAbsolutePath();
		   for (int v = 0; v < length; v++) {
		    if (v < length - 1) { // 最后一个目录之前的目录
		     path += "/" + names[v] + "/";
		     createDir(path);
		    } else { // 最后一个
		     if (entryName.endsWith("/")) // 为目录,则创建文件夹
		      createDir(unzipFile.getAbsolutePath() + "/" + entryName);
		     else { // 为文件,则输出到文件
		      input = zipFile.getInputStream(entry);
		      output = new FileOutputStream(new File(unzipFile
		        .getAbsolutePath()
		        + "/" + entryName));
		      byte[] buffer = new byte[1024 * 8];
		      int readLen = 0;
		      while ((readLen = input.read(buffer, 0, 1024 * 8)) != -1)
		       output.write(buffer, 0, readLen);
		      // 关闭流
		      input.close();
		      output.flush();
		      output.close();
		     }
		    }
		   }
		  }}catch(Exception e){
			  flag=false;
		  }
		 
		return flag;
	}
	 /**
	  * 创建目录
	  * 
	  * @param path
	  *            目录绝对路径名
	  */
	 static void createDir(String path) {
	  File dir = new File(path);
	  if (dir.exists() == false)
	   dir.mkdir();
	 }
	 /**
	  * 取得文件名,不包含后缀名
	  * 
	  * @param name
	  *            完整文件名
	  * @return 文件名(不包含后缀名)
	  */
	 static String getSuffixName(String name) {
	  return name.substring(0, name.lastIndexOf("."));
	 }
	/**
	 * 
	 * 压缩多个文件
	 * 
	 * @param zipFileName
	 *            压缩后的文件名
	 * 
	 * @param inputFiles 待压缩的文件列表
	 * 
	 */
	public static boolean zipFile(String zipFileName, List<File> inputFiles){
        boolean test = true;
        try {
            BufferedInputStream origin = null;
            FileOutputStream dest = new FileOutputStream(zipFileName);
            ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(
                    dest));
            byte data[] = new byte[BUFFER];
            
            for (int i = 0; i < inputFiles.size(); i++) {
            	File file=inputFiles.get(i);
                FileInputStream fi = new FileInputStream(file);
                origin = new BufferedInputStream(fi, BUFFER);
                ZipEntry entry = new ZipEntry(file.getName());
                out.putNextEntry(entry);
                int count;
                while ((count = origin.read(data, 0, BUFFER)) != -1) {
                    out.write(data, 0, count);
                }
                origin.close();
            }
            out.close();
        } catch (Exception e) {
            test = false;
            e.printStackTrace();
        }
        return test;
	}
	/**
	 * 
	 * 压缩多个文件
	 * 
	 * @param zipFileName
	 *            压缩后的文件名
	 * 
	 * @param inputFiles 待压缩的文件列表
	 * 
	 */
	public static boolean zip(String zipFileName, List<String> inputFiles){
        boolean test = true;
        try {
            BufferedInputStream origin = null;
            FileOutputStream dest = new FileOutputStream(zipFileName);
            ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(
                    dest));
            byte data[] = new byte[BUFFER];
            
            for (int i = 0; i < inputFiles.size(); i++) {
                File file = new File(inputFiles.get(i));
                FileInputStream fi = new FileInputStream(file);
                origin = new BufferedInputStream(fi, BUFFER);
                ZipEntry entry = new ZipEntry(file.getName());
                out.putNextEntry(entry);
                int count;
                while ((count = origin.read(data, 0, BUFFER)) != -1) {
                    out.write(data, 0, count);
                }
                origin.close();
            }
            out.close();
        } catch (Exception e) {
            test = false;
            e.printStackTrace();
        }
        return test;
	}
}

Tags:Zip 文件 压缩

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接