文档章节

文件解压缩

yabushan
 yabushan
发布于 2016/04/16 16:02
字数 774
阅读 41
收藏 4
点赞 1
评论 0

1

package com.yabushan.test.util.upload;

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;
import org.slf4j.LoggerFactory;

public class ZipUtil {
	protected static final org.slf4j.Logger log = LoggerFactory.getLogger(ZipUtil.class);
	private static final int BUFFER = 2048;

	/**
	 * 解压文件到指定路径
	 * 
	 * @param filePath
	 * @param upZipPath
	 * @return 返回解压的文件集合
	 */
	public static List<File> unZip(String filePath, String upZipPath) {
		List<File> list = new ArrayList<File>();
		int count = -1;
		File file = null;
		InputStream is = null;
		FileOutputStream fos = null;
		BufferedOutputStream bos = null;
		// 生成指定的保存目录
		String savePath = upZipPath;
		if (!new File(savePath).exists()) {
			new File(savePath).mkdirs();
		}

		try {
			ZipFile zipFile = new ZipFile(filePath, "GBK");
			Enumeration enu = zipFile.getEntries();
			while (enu.hasMoreElements()) {
				ZipEntry zipEntry = (ZipEntry) enu.nextElement();
				if (zipEntry.isDirectory()) {
					new File(savePath + "/" + zipEntry.getName()).mkdirs();
					continue;
				}
				if (zipEntry.getName().indexOf("/") != -1) {
					new File(savePath
							+ "/"
							+ zipEntry.getName().substring(0,
									zipEntry.getName().lastIndexOf("/")))
							.mkdirs();
				}
				is = zipFile.getInputStream(zipEntry);
				file = new File(savePath + "/" + zipEntry.getName());
				fos = new FileOutputStream(file);
				bos = new BufferedOutputStream(fos, BUFFER);

				byte buf[] = new byte[BUFFER];
				while ((count = is.read(buf)) > -1) {
					bos.write(buf, 0, count);
				}

				bos.flush();
				fos.close();
				is.close();
				list.add(file);
			}

			zipFile.close();
			return list;
		} catch (IOException ioe) {
			log.error(ioe.getMessage());
			return list;
		}
	}

	/**
	 * RAR 需要配置rar路径
	 * 
	 * @param filePath
	 * @param unRarPath
	 *            路径要唯一,否则获取文件列表会出错
	 * @return
	 */
	public static int unRar(String filePath, String unRarPath) {
		int result = -99;
		if (!(new File(unRarPath).exists())) {
			new File(unRarPath).mkdirs();
		}
		try {
			//String cmd = GlobalConfig.getConfigValue("cmd.path");
			String cmd="test";
			String unrarCmd = cmd + " e -r -o+ " + filePath + " " + unRarPath;
			Runtime rt = Runtime.getRuntime();

			Process pre = rt.exec(unrarCmd);
			while(result==-99){
			try {
				Thread.sleep(1000L);
				result = pre.exitValue();
			} catch (Exception e) {
				// TODO: handle exception
				result = -99;
			}
			}
			InputStreamReader isr = new InputStreamReader(pre.getInputStream());
			BufferedReader bf = new BufferedReader(isr);
			String line = null;
			while ((line = bf.readLine()) != null) {
				line = line.trim();
				if ("".equals(line)) {
					continue;
				}
				log.info(line);
			}
			bf.close();
			if (result != 0) {
				log.error("unRar " + pre.exitValue());
			}
			// 杀死进程 退出
			// pre.destroy();
			return result;
		} catch (Exception e) {
			log.error(e.getMessage() + ": " + e.getStackTrace());
			return -2;
		}
	}

	/***
	 * 将多个文件打成压缩包
	 * 
	 * @param list
	 *            需打包的文件路径集合
	 * @param zipfilename
	 *            压缩包名称
	 */
	public static void listToZip(List<String> list, String zipfilename) {
		FileInputStream is = null;
		String path = "";
		File file = null;
		ZipOutputStream zos = null;
		try {
			if (list != null && list.size() > 0) {
				//String uri = GlobalConfig.getConfigValue("zipFile.path");
				String uri="D:/ZIP";
				File f = new File(uri);
				if(!f.exists()){
					f.mkdirs();
				}
				zipfilename = uri + zipfilename;
				//创建zip文件输出流
				zos = new ZipOutputStream(new FileOutputStream(new File(
						zipfilename)));
				zos.setEncoding("GBK");
				for (int i = 0; i < list.size(); i++) {
					path = list.get(i);
					file = new File(path);
					if (file.exists()) {
						//创建源文件输入流
						is = new FileInputStream(file);
						zos.putNextEntry(new ZipEntry(file.getName()));
						byte[] buf = new byte[BUFFER];
						int length = -1;
						while ((length = is.read(buf)) != -1) {
							zos.write(buf, 0, length);
							zos.flush();
						}
						zos.closeEntry();
						is.close();
					} else {
						System.out.println("源文件不存在");
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (is != null) {
					is.close();
				}
				if (zos != null) {
					zos.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}

		}

	}
	/***
	 * 将多个文件打成压缩包(压缩包内文件名称由参数中传入)
	 * 
	 * @param list
	 *            需打包的文件信息集合
	 * @param zipfilename
	 *            压缩包名称
	 */
	public static void listMapToZip(List<Map<String,Object>> list, String zipfilename) {
		FileInputStream is = null;
		String path = "";
		File file = null;
		ZipOutputStream zos = null;
		try {
			if (list != null && list.size() > 0) {
				//String uri = GlobalConfig.getConfigValue("zipFile.path");
				String uri="D:/ZIP";
				File f = new File(uri);
				if(!f.exists()){
					f.mkdirs();
				}
				zipfilename = uri + zipfilename;
				//创建zip文件输出流
				zos = new ZipOutputStream(new FileOutputStream(new File(
						zipfilename)));
				zos.setEncoding("GBK");
				for (Map map : list) {
					path = map.get("filePath")+"";
					file = new File(path);
					if (file.exists()) {
						//创建源文件输入流
						is = new FileInputStream(file);
						zos.putNextEntry(new ZipEntry(map.get("fileName")+""));
						byte[] buf = new byte[BUFFER];
						int length = -1;
						while ((length = is.read(buf)) != -1) {
							zos.write(buf, 0, length);
							zos.flush();
						}
						zos.closeEntry();
						is.close();
					} else {
						System.out.println("源文件不存在");
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (is != null) {
					is.close();
				}
				if (zos != null) {
					zos.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}

		}

	}
	public static void main(String[] args) throws Exception {
		List<String> list = new ArrayList<String>();
		list.add("D:/File/img/tempImg/7f7ffd45856be6aa.txt");
		list.add("D:/File/img/tempImg/63f8959465093ec0.jpeg");
		list.add("D:/File/img/tempImg/815b476dc8cf790e.txt");
		list.add("D:/File/img/tempImg/4451519220dad91a.txt");
		//ZipUtil.listToZip(list, "测试.zip");
		
		System.out.println(ZipUtil.unZip("D:/ZIP测试.zip", "D:/ZIP/bb/").toString());
		//Map map = new HashMap<String, Object>();
		//map.put("我", null);
		//System.out.println(String.valueOf(map.get("我")));
	}
}


© 著作权归作者所有

共有 人打赏支持
yabushan
粉丝 1
博文 37
码字总数 34355
作品 0
CentOS7,使用tar命令解压缩文件

我们经常会遇到打包成.gz格式的压缩包,这种包不是可执行自动安装包,这种包相当于是个zip包,其安装过程就是手动解压缩、编辑配置文件、配置环境变量的过程。通过以下命令可以加压缩一个gz文...

rickqin ⋅ 2016/05/05 ⋅ 0

Android Zip文件解压缩代码

在Android平台中如何实现Zip文件的解压缩功能呢? 因为Android内部已经集成了zlib库,对于英文和非密码的Zip文件解压缩还是比较简单的,下面给大家一个解压缩zip的 java代码,可以在Android...

冯京宝 ⋅ 2012/09/28 ⋅ 0

Linux文件压缩:gzip、bzip2、xz

常见压缩格式Windows:.rar、.zip、.7zLinux :.zip、.gz、.bz2、.xz、.tar.gz、.tar.bz2、.tar.xz 一、gzip压缩命令 gzip命令用来压缩文件。gzip是个使用广泛的压缩程序,文件经它压缩过后,...

BatmanLinux ⋅ 01/05 ⋅ 0

6.1 压缩打包介绍 6.2 gzip压缩工具 6.3 bzip2压缩工具 6.4 xz压缩工具

6.1 压缩打包介绍 6.2 gzip压缩工具 6.3 bzip2压缩工具 6.4 xz压缩工具 6.1 压缩打包介绍 文件压缩的理由: 节省空间 方便传输 节省带宽资源 常见的压缩文件的后缀名: Windows : .rar、.zip、...

JasonYan86 ⋅ 2017/07/04 ⋅ 0

linux之压缩及归档

压缩 利用算法将文件有损或无损地处理,以达到保留最多文件信息,而令文件体积变小。 二进制信息中相同的字符串以特殊字符标记来达到压缩的目的。 解压缩 还原压缩文件 压缩格式:gz、bz2、x...

巫哲 ⋅ 2014/05/09 ⋅ 0

解决ubuntu下打不开rar文件

方法一: 安装 rar 解压缩文件: sudo apt-get install rar 解压缩 rar 文件: rar e myfile.rar 安装 7zip 解压缩工具: sudo apt-get install p7zip p7zip 包括 p7zip 和 7zr 两个可执行文...

猴纸 ⋅ 2012/07/21 ⋅ 0

文件压缩、解压缩以及归档工具详解

一、简介 早期的有compress和uncompress,其对应的是.Z结尾的压缩格式文件;现在使用较多的有: gzip/gunzip,其对应的是.gz结尾的压缩格式文件; bzip2/bunzip2其对应的是.bz2结尾的压缩格式...

wzcLINUXER ⋅ 2017/08/16 ⋅ 0

Linux系统压缩及解压缩

============================================================================== Linux系统解压缩 ============================================================================== 概述......

逐梦小涛 ⋅ 2017/02/20 ⋅ 0

解决ubuntu下打不开rar文件

方法一: 安装 rar 解压缩文件: sudo apt-get install rar 解压缩 rar 文件: rar e myfile.rar 安装 7zip 解压缩工具: sudo apt-get install p7zip p7zip 包括 p7zip 和 7zr 两个可执行文...

小猴纸 ⋅ 2012/10/05 ⋅ 0

小蚂蚁学习Linux(6)——压缩与解压缩命令详解

在Linux中常用的压缩格式有以下几个:.zip .gz .bz2 .tar.gz tar.bz2。首先先解释前三个。 .zip格式的压缩: zip 压缩文件名 原文件名 如:zip abc.zip abc 后缀名是一定要写的,虽然Linux不...

嗜学如命的小蚂蚁 ⋅ 2015/11/01 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

彻底删除Microsoft Office的方法

参照此链接彻底删除Office https://support.office.com/zh-cn/article/%e4%bb%8e-pc-%e5%8d%b8%e8%bd%bd-office-9dd49b83-264a-477a-8fcc-2fdf5dbf61d8?ui=zh-CN&rs=zh-CN&ad=CN......

Kampfer ⋅ 27分钟前 ⋅ 0

大盘与个股之间关系

大盘走多:积极出手 顺势加码 大盘走空: 少量出手 退场观望 大盘做头:逆势减码 少量操作 大盘做底 : 小量建仓 小量试单

guozenhua ⋅ 29分钟前 ⋅ 0

Day16 LVM(逻辑卷管理)与磁盘故障小案例

lvm详解 简述 LVM的产生是因为传统的分区一旦分区好后就无法在线扩充空间,也存在一些工具能实现在线扩充空间但是还是会面临数据损坏的风险;传统的分区当分区空间不足时,一般的解决办法是再...

杉下 ⋅ 35分钟前 ⋅ 0

rsync实现多台linux服务器的文件同步

一、首先安装rsync,怎样安装都行,rpm,yum,还是你用源码安装都可以。因为我用的是阿里云的ESC,yum install rsync就ok了。 二、配置rsync服务 1.先建立个同步数据的帐号 123 groupadd r...

在下头真的很硬 ⋅ 48分钟前 ⋅ 0

前端基础(三):函数

字数:1685 阅读时间:5分钟 函数定义 在最新的ES规范中,声明函数有4中方法: -函数声明 -函数表达式 -构造函数Function -生成器函数 1.函数声明 语法: function name([param[, param2 [....

老司机带你撸代码 ⋅ 今天 ⋅ 0

Java虚拟机的Heap监狱

在Java虚拟机中,我是一个位高权重的大管家,他们都很怕我,尤其是那些Java 对象,我把他们圈到一个叫做Heap的“监狱”里,严格管理,生杀大权尽在掌握。 中国人把Stack翻译成“栈”,把Hea...

java高级架构牛人 ⋅ 今天 ⋅ 0

Spring MVC基本概念

只写Controller

颖伙虫 ⋅ 今天 ⋅ 0

微软重金收购GitHub的背后逻辑原来是这样的

全球最大的开发者社区GitHub网站花落谁家的问题已经敲定,微软最终以75亿美元迎娶了这位在外界看来无比“神秘”的小家碧玉。尽管此事已过去一些时日,但整个开发者世界,包括全球各地的开源社...

linux-tao ⋅ 今天 ⋅ 0

磁盘管理—逻辑卷lvm

4.10-4.12 lvm 操作流程: 磁盘分区-->创建物理卷-->划分为卷组-->划分成逻辑卷-->格式化、挂载-->扩容。 磁盘分区 注: 创建分区时需要更改其文件类型为lvm(代码8e) 分区 3 已设置为 Linu...

弓正 ⋅ 今天 ⋅ 0

Spring源码解析(六)——实例创建(上)

前言 经过前期所有的准备工作,Spring已经获取到需要创建实例的 beanName 和对应创建所需要信息 BeanDefinition,接下来就是实例创建的过程,由于该过程涉及到大量源码,所以将分为多个章节进...

MarvelCode ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部