`

生成压缩文件zip包

 
阅读更多
package com.spider.reader.common.tool;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;

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

import com.spider.reader.common.util.StringUtils;



public class ZipUtil {
	/** 得到当前系统的分隔符 */
	// private static String separator = System.getProperty("file.separator");

	/**
	 * 添加到压缩文件中
	 * 
	 * @param out
	 * @param f
	 * @param base
	 * @throws Exception
	 */
	private static void directoryZip(ZipOutputStream out, File f, String base) throws Exception {
		// 如果传入的是目录
		if (f.isDirectory()) {
			File[] fl = f.listFiles();
			// 创建压缩的子目录
			out.putNextEntry(new ZipEntry(base + "/"));
			if (base.length() == 0) {
				base = "";
			} else {
				base = base + "/";
			}
			for (int i = 0; i < fl.length; i++) {
				directoryZip(out, fl[i], base + fl[i].getName());
			}
		} else {
			// 把压缩文件加入rar中
			out.putNextEntry(new ZipEntry(base));
			FileInputStream in = new FileInputStream(f);
			byte[] bb = new byte[10240];
			int aa = 0;
			while ((aa = in.read(bb)) != -1) {
				out.write(bb, 0, aa);
			}
			in.close();
		}
	}

	/**
	 * 压缩文件
	 * 
	 * @param zos
	 * @param file
	 * @throws Exception
	 */
	private static void fileZip(ZipOutputStream zos, File file) throws Exception {
		if (file.isFile()) {
			zos.putNextEntry(new ZipEntry(file.getName()));
			FileInputStream fis = new FileInputStream(file);
			byte[] bb = new byte[10240];
			int aa = 0;
			while ((aa = fis.read(bb)) != -1) {
				zos.write(bb, 0, aa);
			}
			fis.close();
		} else {
			directoryZip(zos, file, "");
		}
	}

	/**
	 * 解压缩文件
	 * 
	 * @param zis
	 * @param file
	 * @throws Exception
	 */
//	private void fileUnZip(ZipInputStream zis, File file) throws Exception {
//		ZipEntry zip = zis.getNextEntry();
//		if (zip == null)
//			return;
//		String name = zip.getName();
//		File f = new File(file.getAbsolutePath() + "/" + name);
//		if (zip.isDirectory()) {
//			f.mkdirs();
//			fileUnZip(zis, file);
//		} else {
//			f.createNewFile();
//			FileOutputStream fos = new FileOutputStream(f);
//			byte b[] = new byte[10240];
//			int aa = 0;
//			while ((aa = zis.read(b)) != -1) {
//				fos.write(b, 0, aa);
//			}
//			fos.close();
//			fileUnZip(zis, file);
//		}
//	}
	
	private void fileUnZip(ZipFile zipFile, File file) throws Exception {
		Enumeration<?> enums = zipFile.getEntries();
		while(enums.hasMoreElements()){
			ZipEntry zip = (ZipEntry) enums.nextElement();
			if (zip == null)
				return;
			String name = zip.getName();
			File f = new File(file.getAbsolutePath() + "/" + name);
			if (zip.isDirectory()) {
				f.mkdirs();
			} else {
				f.createNewFile();
				InputStream is = null;
				OutputStream os = null;
				try {
					is = zipFile.getInputStream(zip);
					os = new FileOutputStream(f);
					byte b[] = new byte[10240];
					int aa = 0;
					while ((aa = is.read(b)) != -1) {
						os.write(b, 0, aa);
					}
					os.close();
				} catch (IOException e) {
					throw e;
				}finally{
					if(is!=null)
						is.close();
					if(os!=null)
						os.close();
				}
			}
		}
	}

	/**
	 * 根据filePath创建相应的目录
	 * 
	 * @param filePath
	 * @return
	 * @throws IOException
	 */
	private static File mkdirFiles(String filePath) throws IOException {
		File file = new File(filePath);
		if (!file.getParentFile().exists()) {
			file.getParentFile().mkdirs();
		}
		file.createNewFile();
		return file;
	}

	/**
	 * 对zipBeforeFile目录下的文件压缩,保存为指定的文件zipAfterFile
	 * 
	 * @param zipBeforeFile
	 *            压缩之前的文件
	 * @param zipAfterFile
	 *            压缩之后的文件
	 */
	public static void zip(String mkdirName, String fileName) {
		try {
			ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(mkdirFiles(fileName)));
			fileZip(zos, new File(mkdirName));
			/** 设置编码方式,避免中文的文件名显示成乱码* */
			zos.setEncoding("gbk");
			zos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 解压缩文件unZipBeforeFile保存在unZipAfterFile目录下
	 * 
	 * @param unZipBeforeFile 解压之前的文件
	 * @param unZipAfterFile 解压之后的文件
	 */
//	public void unZip(String unZipBeforeFile, String unZipAfterFile) {
//		try {
//			ZipInputStream zis = new ZipInputStream(new FileInputStream(unZipBeforeFile));
//			File f = new File(unZipAfterFile);
//			f.mkdirs();
//			fileUnZip(zis, f);
//			zis.close();
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//	}
	
	public void unZip(String unZipBeforeFile, String unZipAfterFile) {
		try {
			ZipFile zipFile = null;
			try {
				zipFile = new ZipFile(unZipBeforeFile);
				File f = new File(unZipAfterFile);
				f.mkdirs();
				fileUnZip(zipFile, f);
			} catch (IOException e) {
				throw new IOException("解压缩文件出现异常");
			}finally{
				try{
					if(zipFile != null){
						zipFile.close();
					}
				}catch(IOException ex){
					throw new IOException("关闭zipFile出现异常");
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void copy(String path1, String path2) throws IOException {
		DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream(path1)));
		byte[] date = new byte[in.available()];
		in.read(date);
		DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(path2)));
		out.write(date);
		in.close();
		out.close();
	}
	
	/**
	 * 拷贝图片 新图片以流的形式存储
	 * @param path1
	 * @param path2
	 * @throws IOException
	 */
	public static void copyStream(String path1, String path2) throws IOException{
		if(StringUtils.isNotEmpty(path2) && path2.contains(".")){
			path2 = path2.substring(0, path2.lastIndexOf("."));
			File fileNew = new File(path1);
			File fileOld = new File(path2);
			InputStream input = null;
			FileOutputStream output = null;
			try{
				input = new FileInputStream(fileNew);
				output = new FileOutputStream(fileOld);
				FileInputStream in = new FileInputStream(path1);
				byte[] b = new byte[in.available()];
				int read;
				while ((read = input.read(b)) != -1) {
					output.write(b, 0, read);
				}
			}finally{
				if(null != input){
					input.close();
				}
				if(null != output){
					output.close();
				}
			}
		}
	}
	
	/**
	 * 拷贝图片 新图片以流的形式存储
	 * @param path1
	 * @param path2
	 * @throws IOException
	 */
	public static void copyStreamTwo(String path1, String path2) {
		File fileNew = new File(path1);
		File fileOld = new File(path2);
		InputStream input = null;
		FileOutputStream output = null;
		try{
			input = new FileInputStream(fileNew);
			output = new FileOutputStream(fileOld);
			FileInputStream in = new FileInputStream(path1);
			byte[] b = new byte[in.available()];
			int read;
			while ((read = input.read(b)) != -1) {
				output.write(b, 0, read);
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			try{
				if(null != input){
					input.close();
				}
				if(null != output){
					output.close();
				}
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	}
}

 

分享到:
评论

相关推荐

    php生成zip压缩文件

    在PHP中生成ZIP压缩文件是一项常见的任务,尤其是在网站开发中,我们可能需要将多个文件打包成一个可下载的压缩文件,以方便用户批量获取或传输数据。本篇将详细讲解如何利用PHP的ZipArchive类来实现这一功能。 ...

    jquery打包,生成并下载zip文件

    标题 "jquery打包,生成并下载zip文件" 描述了一个使用jQuery技术在前端将图片文件打包成ZIP文件并供用户下载的场景。这个过程无需后端服务器的介入,从而减轻了服务器的压力并提高了用户体验。让我们详细了解一下这...

    java压缩文件生成带密码的zip包,解压带密码的zip包的工具类

    压缩文件方法 该方法需要引用zip4j的jar文件 单个文件、多个文件压缩 /** * 使用给定密码压缩指定文件或文件夹到指定位置. * * dest可传最终压缩文件存放的绝对路径,也可以传存放目录,也可以传null或者""....

    生成excel并打包成zip文件

    综上所述,"生成excel并打包成zip文件"这个任务涉及到使用Java编程语言,特别是Apache POI库来生成Excel文件,再结合Java标准库的压缩功能将Excel和文本文件打包成ZIP。整个过程涉及到了文件的创建、写入、压缩和...

    CSV文件生成及Z压缩成zip下载

    分步生成csv,获取数据第一行生成文件标题,同时生成第一行数据,返回标题名称。 将多csv文件压缩成zip,之后删除原csv文件

    Java实现将多目录多层级文件打成ZIP包,以及解压ZIP包

    这个库简化了在Java中处理压缩文件的过程,提供了丰富的API供开发者使用。 首先,我们来看`FileUtils.java`中的主要方法。通常,这个类会包含两个核心功能:`zipFiles()`用于创建ZIP包,`unzipFile()`用于解压ZIP包...

    java 生成zip压缩文件

    首先,Java标准库提供了`java.util.zip`包,该包包含了处理压缩文件格式(如ZIP和GZ)所需的所有类。在创建ZIP文件时,我们主要会用到`ZipOutputStream`和`FileInputStream`这两个类。`ZipOutputStream`用于写入ZIP...

    java生成.zip包,解压缩.zip

    最后,`生成zip包代码.txt`和`解压缩zip包.txt`文件可能包含了具体的实现代码,而`需要用的jar包`可能是指在某些情况下,如使用第三方库时,可能需要引入额外的依赖项。例如,如果使用了Apache Commons Compress库,...

    java后台批量下载文件并压缩成zip下载的方法

    Java后台批量下载文件并压缩成zip下载的方法 Java后台批量下载文件并压缩成zip下载的方法是指在Java后台中批量下载文件,并将其压缩成zip文件下载到本地桌面。该方法具有重要的参考价值,感兴趣的小伙伴们可以参考...

    多个excel导出压缩成zip 文件 数据量大导出

    - 在Python中,可以使用`pandas`库来处理Excel数据,`os`库进行文件操作,`zipfile`库则用于压缩文件。通过编写脚本,可以自动化完成数据导出和压缩过程。 - 示例代码: ```python import pandas as pd import ...

    用PHP生成zip文件.

    在PHP中生成ZIP文件是一项常见的任务,特别是在处理网站文件打包、数据备份或文件分发时。`PHPZip`是一个PHP类,它提供了方便的方法来创建和管理ZIP档案。以下是对这个话题的详细解释: 首先,我们需要理解`PHPZip`...

    asp文件打包成zip组件

    这个“asp文件打包成zip组件”可能是一个自定义的ASP组件或者类库,它允许开发者在ASP应用程序中实现文件压缩的功能。 首先,让我们了解一下ZIP文件格式。ZIP是一种广泛使用的档案格式,可以将多个文件和目录压缩到...

    PHP生成压缩文,不带要压缩文件的根目录

    在PHP编程中,生成压缩文件是一项常见的任务,特别是在网站数据备份、文件分发或用户下载场景下。"PHP生成压缩文,不带要压缩文件的根目录"这个话题,主要涉及的是如何使用PHP的ZipArchive类来创建一个ZIP文件,但不...

    java生成PDF 然后加密压缩文件

    前段时间由于项目需要,使用java生成PDF文件,然后将文件压缩成ZIP格式,同时对压缩文件进行加密,先将代码及jar包上传供大家参考,并希望大家共同完善和学习。 java生成PDF,java加密压缩文件并,java生成PDF后压缩...

    C++ Zlib库实现zip文件压缩解压(支持递归压缩)

    在IT领域,尤其是在软件开发中,压缩和解压缩文件是一项常见的任务。`C++`作为一门强大且广泛应用的编程语言,提供了多种库来处理这样的需求。`Zlib`库就是一个非常著名的开源库,专用于数据压缩和解压缩,广泛应用...

    windows下压缩的zip文件,上传到Linux后unzip不认的解决办法

    如果`unzip`不支持,可以尝试在Linux系统中安装其他工具,比如`p7zip`,它是一个兼容7-Zip格式的命令行工具,通常能处理更多类型的压缩文件。 5. **手动转换**: 对于已有的ZIP文件,你可以在Linux下先用`file`...

    Java多个文件根据URL下载后打包zip导出.zip

    在Java编程中,有时我们需要从网络上下载多个文件并将其打包为一个压缩文件,例如ZIP格式,以便于存储或分发。这个过程涉及到文件I/O操作、网络请求以及压缩算法的使用。以下是对这个场景的详细说明: 1. **网络...

    java如何生成压缩文件jar.zip

    在Java编程环境中,生成压缩文件,如`.jar`或`.zip`,是常见的需求,尤其在打包和分发应用程序时。下面将详细讲解如何使用Java来创建`.jar`和`.zip`格式的压缩文件。 首先,`.jar`文件是Java档案(Java Archive)...

    php生成zip压缩文件的方法详解

    在PHP中生成zip压缩文件是Web开发中常用的功能,它能够帮助开发者打包文件或者文件夹并提供给用户下载,极大地提高了数据传输的效率。接下来,我们将详细探讨PHP生成zip压缩文件的方法。 首先,我们需要了解在PHP中...

    java POI生成word.zip

    在本案例中,"java POI生成word.zip"是一个压缩包,包含使用Java POI库生成Word文档的示例代码。以下是基于这个主题的相关知识点: 1. **Java POI库介绍** - Java POI 是一套API,用于处理Microsoft Office格式的...

Global site tag (gtag.js) - Google Analytics