apache ant解压zip。支持多级目录解压

package cn.liuc.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Enumeration;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;

public class ZipByOriginalExtractUtil {

	public static ArrayList<String> unzipFile(String zipFilePath) {
		String path = zipFilePath.replaceAll("\\\\", "/");
		String outputDirectory = path.substring(0, path.lastIndexOf("."))+"/";
		return unZip(zipFilePath, outputDirectory);
	}

	/**
	 * 生存目录
	 *
	 * @param directory
	 *            解压文件存放目录
	 * @param subDirectory
	 *            子目录(没有时可传入空字符串)
	 */
	private static void createDirectory(String directory, String subDirectory) {
		String dir[];
		File fl = new File(directory);
		try {
			if (subDirectory == "" && fl.exists() != true)
				fl.mkdir();
			else if (subDirectory != "") {
				dir = subDirectory.replace('\\', '/').split("/");
				for (int i = 0; i < dir.length; i++) {
					File subFile = new File(directory + File.separator + dir[i]);
					if (subFile.exists() == false)
						subFile.mkdir();
					directory += File.separator + dir[i];
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 解压指定的ZIP文件
	 *
	 * @param unZipFileName
	 *            文件名字符串(包含路径)
	 * @param outputDirectory
	 *            解压后存放目录
	 * @return
	 */
	public static ArrayList<String> unZip(String unZipFileName,
			String outputDirectory) {
		ArrayList<String> unzipFileList = new ArrayList<String>();
		int readedBytes;
		FileOutputStream fileOutStream=null;
		byte[] buff = new byte[1024];
		// File file;
		InputStream inputStream=null;
		ZipFile zipFile = null;
		try {
			createDirectory(outputDirectory, "");
			if (System.getProperty("os.name").toLowerCase().indexOf("windows") >= 0) {
				zipFile = new ZipFile(unZipFileName, "GBK");
			} else if (System.getProperty("os.name").toLowerCase()
					.indexOf("linux") >= 0) {
				zipFile = new ZipFile(unZipFileName, "UTF-8");
			}
			for (Enumeration<ZipEntry> entries = zipFile.getEntries(); entries
					.hasMoreElements();) {
				ZipEntry entry = (ZipEntry) entries.nextElement();
				if (entry.isDirectory()) {
					// 是目录,则创建之
					String name = entry.getName().substring(0,
							entry.getName().length() - 1);
					File f = new File(outputDirectory + File.separator + name);
					f.mkdir();
					// file.mkdirs();
				} else {
					// 是文件
					String fileName = entry.getName().replaceAll("\\\\", "/");
					String path = outputDirectory + "/" + fileName;
					File f = new File(path);
					f.createNewFile();
					inputStream = zipFile.getInputStream(entry);
					fileOutStream = new FileOutputStream(f);
					while ((readedBytes = inputStream.read(buff)) > 0) {
						fileOutStream.write(buff, 0, readedBytes);
					}
					fileOutStream.close();
					inputStream.close();
					unzipFileList.add(path);
				}
			}
			zipFile.close();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if (inputStream!=null) {
				try {
					inputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (fileOutStream!=null) {
				try {
					fileOutStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return unzipFileList;
	}

	/**
	 *
	 * \brief 测试
	 *
	 * @param args
	 * @throws Exception
	 * @attention 方法的使用注意事项
	 * @author liuchao
	 * @date 2013-9-13
	 * @note begin modify by 修改人 修改时间 修改内容摘要说明
	 */
	public static void main(String[] args) throws Exception {

		unzipFile("E:\\专家协同解决方案.zip");
	}

}

apache ant解压zip。支持多级目录解压

时间: 2024-10-03 01:46:11

apache ant解压zip。支持多级目录解压的相关文章

Windows Azure Storage (22) Azure Storage如何支持多级目录

<Windows Azure Platform 系列文章目录> 熟悉Azure平台的读者都知道,Azure Blob有三层架构.如下图:(注意blob.core.chinacloudapi.net是Azure China的Service Endpoint) 1.Blob Name: 存储账号名称 2.Container Name,容器名称.概念上类似于文件夹 3.Blob Name:文件名称 Azure Storage Block Blob概念上类似网盘,用户可以把文件.图片.照片直接保存到A

CodeIgniter 让控制器可以支持多级子目录的 Router 类库

MY_Router.php 放到 system/application/libraries 目录下,就可以让 CI 的控制器支持多级子目录了.这样,你就可以在 system/application/controllers 目录下放置更多级别的目录,访问的方式就是 index.php/目录1/目录2/目录3/控制器/方法/参数请注意,你不需要 load,因为这个类是系统自动 load 的. MY_Router.php 代码 <?php if ( ! defined('BASEPATH')) exi

android 从assets目录解压zip到本地sdCard

package com.lapel.activity.html; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import android.content.Context; /** * *

java 解压 zip 包并删除

需求是这样的,  在服务器上有 运营上传的zip 包,内容是用户的照片,我需要做的是 获取这些照片上传,并保存到 数据库. 这里面的 上传照片,保存数据库都不难,主要问题是解压zip包,和删除zip 包,以及 解压后的文件. 之前在网上找的解压的文件的代码,都存在同一个问题,就是解压之后,无法删除 zip 包.查百度说是 资源占用,可是我已经把所有的流都关闭了哇. 我把解压和删除分成两部分用 jUnit  测试:   第一次测试解压,并不删除包:第二次只删除包.我发现,解压方法和删除方法在同一个

java对 zip文件的压缩和解压(ant解决中文乱码)

说明: 1.对于压缩的文件,当文件名称是中文时,若使用JDK API中自带的类(java.util.zip.ZipEntry; java.util.zip.ZipOutputStream;)进行压缩,压缩完成后,可以看到压缩包中的文件名称是乱码(文件的内容无乱码),所以使用ANT中的ant.jar中的类(org.apache.tools.zip.ZipEntry; org.apache.tools.zip.ZipOutputStream;)用来解决此问题: 2.解压缩时,如果压缩包中为空,则创建

java 压缩以及解压文件,有tar,zip,gz(gizp)和解压

package com.yabsz.decompCompr; import java.io.File; import java.util.ArrayList; import java.util.List; public class main { public static void main(String[] args) { //需要下载commons-net-ftp-2.0.jar包下载地址:http://download.csdn.net/detail/u010696272/8006739

java zip压缩和解压(支持中文)

package com.xeon.mis.utils; 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.util.Enumeration; impor

Java解压ZIP、RAR文件

解压ZIP: maven地址: <groupId>org.apache.ant</groupId> <artifactId>ant</artifactId> <version>1.9.7</version> </dependency> public static void unzipFile(String zipFileName) throws Exception { try { File f = new File(zip

android zip4j之--解压zip文件并实时显示解压进度

Zip文件是我们经常用到压缩文件格式,android中在进行网络请求大批量数据时,通常会采用传递zip文件,这样做即可以减少网络流量的消耗,加快请求的响应速度,又可以减少对存储空间的要求,所以当我们将zip文件读取回来的时候,如何解压就是一个要解决的问题,虽然java本身提供了zip相关的API,但不是很强大,所以我们采用apache开源组织的zip4j,通过这个jar包可以十分轻松的解压zip文件. 回到项目中去,项目中有个需求是从服务器请求杂志,请求回来后给读者展示,但是由于公司自己做的电子