`
jaychang
  • 浏览: 734861 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类
最新评论

Zip解压,加压

阅读更多

由于频繁需要解压ZIP,加压ZIP

 

故自己写了个工具类方便以后处理时用到,暂时不给过多解释,有啥问题,大家一起讨论哈

 

FileItem:

 

public class FileItem {
	private String fileName;
	private byte[] fileContent;

	public String getFileName() {
		return fileName;
	}

	public void setFileName(String fileName) {
		this.fileName = fileName;
	}

	public byte[] getFileContent() {
		return fileContent;
	}

	public void setFileContent(byte[] fileContent) {
		this.fileContent = fileContent;
	}
}

 

   FileUtil:

 

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

public class FileUtil {
	/**缓存大小*/
	private final static int BUFFER_SIZE = 8192;
	/**后缀名*/
	private final static String SUFFIX = "zip";
	/**后缀名分隔符*/
	private final static String POINT = ".";
	
	/**
	 * 获得字节数组
	 * 
	 * @param filepath 文件全路径
	 * @return 字节数组
	 * @throws IOException IOException
	 */
	
	public static byte[] getBytes(File file) throws IOException{
		return getBytes(file.getAbsolutePath());
	} 
	public static byte[] getBytes(String filepath) throws IOException {
		BufferedInputStream bis = null;
		ByteArrayOutputStream byteArrayOutputStream = null;
		BufferedOutputStream bos = null;
		try {
			byteArrayOutputStream = new ByteArrayOutputStream();
			bis = new BufferedInputStream(new FileInputStream(filepath));
			bos = new BufferedOutputStream(byteArrayOutputStream);
			byte[] bytes = new byte[BUFFER_SIZE];
			int len;
			while ((len = bis.read(bytes, 0, BUFFER_SIZE)) != -1) {
				bos.write(bytes, 0, len);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			throw e;
		} catch (IOException e) {
			e.printStackTrace();
			throw e;
		} finally {
			if (null != bis) {
				try {
					bis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (null != byteArrayOutputStream) {
				try {
					byteArrayOutputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (null != bos) {
				try {
					bos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return byteArrayOutputStream.toByteArray();
	}
	
	/**
	 * 统一文件分隔符为LINUX,类UNIX文件系统风格
	 * 
	 * @param direcotory 目录
	 * @return 统一处理后目录字符串风格
	 */
	private static String replaceAllSeparator(String direcotory) {
		String str = direcotory.replaceAll("\\\\", "/");
		return str.length() != str.lastIndexOf("/") ? str + "/" : str;
	}
	
	/**
	 * 将文件项写到文件 
	 * 
	 * @param fileItem 文件项
	 * @param directory 目录
	 * @throws IOException IOException
	 */
	public static void writeFile(FileItem fileItem, String directory)
			throws IOException {
		File dir = new File(directory);
		if (!dir.exists()) {
			dir.mkdirs();
		}
		writeFile(fileItem.getFileContent(), replaceAllSeparator(directory)
				+ fileItem.getFileName());
	}

	/**
	 * 写文件
	 * 
	 * @param fileContent 文件二进制流
	 * @param filepath 文件全路径
	 * @throws IOException IOException 
	 */
	public static void writeFile(byte[] fileContent, String filepath)
			throws IOException {
		InputStream inputStream = new ByteArrayInputStream(fileContent);
		writeFile(inputStream, filepath);
	}
	
	/**
	 * 将流写到一个文件
	 * 
	 * @param inputStream 文件流
	 * @param filepath 文件路径
	 * @throws IOException IOException 
	 */
	public static void writeFile(InputStream inputStream, String filepath)
			throws IOException {
		BufferedOutputStream bos = null;
		BufferedInputStream bis = null;
		try {
			File file = new File(filepath);
			if (!file.exists()) {
				file.createNewFile();
			}
			bos = new BufferedOutputStream(new FileOutputStream(file));
			bis = new BufferedInputStream(inputStream);
			byte[] buffer = new byte[BUFFER_SIZE];
			int len = -1;
			while ((len = bis.read(buffer, 0, BUFFER_SIZE)) != -1) {
				bos.write(buffer, 0, len);
			}
		} catch (IOException e) {
			e.printStackTrace();
			throw e;
		} finally {
			if (null != bos)
				try {
					bos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			if (null != bis)
				try {
					bis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
		}
	}
	
	/**
	 * 解压zip文件
	 * @param filepath 文件全路径
	 * @return 解压后的文件项
	 * @throws IOException IOException
	 */
	public static List uncompressZip(String filepath) throws IOException {
		ByteArrayOutputStream baos = null;
		BufferedOutputStream bos = null;
		ZipInputStream zis = null;
		// zipInputStream
		List fileList = null;
		try {
			zis = new ZipInputStream(new FileInputStream(filepath));
			baos = new ByteArrayOutputStream();
			bos = new BufferedOutputStream(baos);
			fileList = new ArrayList();
			byte[] buffer = new byte[BUFFER_SIZE];
			int len = -1;
			ZipEntry zipEntry = null;
			while (null != (zipEntry = zis.getNextEntry())) {
				if (null != zipEntry) {
					System.out.println("Name:" + zipEntry.getName() + ",Size:"
							+ zipEntry.getSize() + "bytes");
					while (-1 != (len = zis.read(buffer))) {
						bos.write(buffer, 0, len);
					}
					bos.flush();
					byte[] fileContent = baos.toByteArray();
					FileItem item = new FileItem();
					item.setFileName(zipEntry.getName());
					item.setFileContent(fileContent);
					fileList.add(item);
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
			throw e;
		} finally {
			if (null != zis) {
				try {
					zis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (null != baos) {
				try {
					baos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (null != bos) {
				try {
					bos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return fileList;
	}

	/**
	 * 将目录压缩成zip包
	 * 
	 * @param filepath
	 *            文件全路径
	 * @throws IOException
	 *             IOException
	 */
	public static FileItem compressZip(String filepath) throws IOException {
		File directory = new File(filepath);
		String filename = directory.getName();
		File[] fileList = directory.listFiles();
		ZipOutputStream zos = null;
		BufferedInputStream bis = null;
		ByteArrayOutputStream baos = null;
		FileItem fileItem = null;
		try {
			baos = new ByteArrayOutputStream();
			zos = new ZipOutputStream(baos);
			byte[] buffer = new byte[BUFFER_SIZE];
			int len = -1;
			for (File file : fileList) {
				bis = new BufferedInputStream(new FileInputStream(file));
				while (-1 != (len = bis.read(buffer, 0, BUFFER_SIZE))) {
					//ZipEntry为Zip压缩文件的每一项
					ZipEntry zipEntry = new ZipEntry(file.getName());
					zipEntry.setSize(file.length());
					zipEntry.setCompressedSize(file.length());
					zos.putNextEntry(zipEntry);
					zos.write(buffer, 0, len);
				}
				//做完一个文件的读写应清下缓存
				zos.flush();
				if (null != bis) {
					bis.close();
				}
			}
			//完成所有文件的读取,转化为一个二进制流的包装zos
			zos.finish();
			fileItem = new FileItem();
			int index = filename.lastIndexOf(".");
			filename = filename.substring(0, -1 == index ? filename.length()
					: index);
			//要生成zip文件的文件名
			fileItem.setFileName(filename + POINT + SUFFIX);
			//要生成的zip文件的二进制流
			fileItem.setFileContent(baos.toByteArray());
		} catch (IOException e) {
			e.printStackTrace();
			throw e;
		} finally {
			if (null != baos) {
				try {
					baos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (null != bis) {
				try {
					bis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (null != zos) {
				try {
					zos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return fileItem;
	}

	/**
	 * 解压zip文件
	 * 
	 * @param zipFile zip文件
	 * @return 解压后的文件项
	 * @throws IOException IOException
	 */
	public static List uncompressZip(File zipFile) throws IOException {
		String filepath = zipFile.getAbsolutePath();
		return uncompressZip(filepath);
	}

	public static void main(String[] args) throws IOException {
		//加压
		FileItem fileItem = compressZip("F:/Hbzspt/sbinput/SCYSB_1234567890_0901_20100912082719250");
		//将SCYSB_1234567890_0901_20100912082719250.zip文件写到F:/zjie目录
		FileUtil.writeFile(fileItem, "F:/zjie");
		//解压F:/zjie/SCYSB_1234567890_0901_20100912082719250.zip文件
		List fileItemList = FileUtil
				.uncompressZip("F:/zjie/SCYSB_1234567890_0901_20100912082719250.zip");
		//将解压后的文件流生成文件写到F:/zjie/SCYSB_1234567890_0901_20100912082719250/目录
		for (int i = 0; i < fileItemList.size(); i++) {
			FileItem item = (FileItem) fileItemList.get(i);
			DbfUtil.dbfReader(item.getFileContent());
			FileUtil.writeFile(item.getFileContent(), "F:/zjie/SCYSB_1234567890_0901_20100912082719250/"+item.getFileName());
		}
		
	}
}
0
0
分享到:
评论

相关推荐

    Android对Zip文件的加压和解压

    本篇将详细探讨如何在Android中实现Zip文件的加压和解压操作。 首先,我们要了解Zip文件格式。Zip是一种广泛使用的档案格式,它可以将多个文件和目录打包成一个单一的文件,方便存储和传输。在Android中,我们可以...

    C#实现Zip压缩解压

    ### ZIP解压 1. **打开ZipArchive**:使用`ZipFile.OpenRead()`方法,传入ZIP文件的路径,来创建一个只读的ZipArchive实例。 2. **遍历并解压文件**:通过遍历`ZipArchive.Entries`集合,对每个ZipArchiveEntry,...

    Java通用解压代码(RAR5,Zip,7Z)

    在Java编程环境中,解压不同类型的压缩文件,如RAR5、Zip和7z,是一项常见的任务。为了实现这一功能,我们需要使用特定的库,因为Java标准库并不直接支持RAR5和7z格式。这里我们将详细探讨如何使用Java来处理这些...

    Android-Android端zip压缩与解压支持使用密码对单文件多文件文件夹进行压缩以及解压操作

    `Zip4j`是一个强大的Java库,专门为处理ZIP文件而设计,它提供了丰富的API来创建、读取、更新和解压ZIP文件,同时支持加密。 首先,我们需要了解ZIP文件格式。ZIP是一种广泛使用的文件归档格式,可以将多个文件和...

    加压解压器

    加压解压器是计算机软件领域中一个非常基础且实用的工具,主要用于处理各种压缩文件格式,如RAR、ZIP等。在Windows操作系统环境下,WinRAR是一款广泛应用的加压解压软件,它提供了丰富的功能,包括创建、管理和提取...

    java 解压zip,rar文件

    在Java编程环境中,解压ZIP和RAR文件是常见的任务,特别是在处理数据传输、备份或集成系统时。本文将深入探讨如何使用Java实现这一功能,并提供详细的步骤和代码示例。 首先,我们来看如何使用Java来解压ZIP文件。...

    php上传解压和加压在空火箭上传时用到

    对于题目中提到的“空火箭”上传情况,如果该环境中没有预装的ZIP解压工具,我们可以利用上述PHP代码自行处理文件的压缩与解压。例如,用户上传一个包含多个文件的ZIP包,服务器端先使用`ZipArchive`类解压文件,...

    Delphi 压缩解压缩zip文件源代码,支持密码

    可以将任意一个zip文件,加压到一个目录中,该目录位于当前执行文件所在目录的Unzip目录中,目录结构不变 3. 可以加压出任意一个zip文件中的文件到当前执行文件所在目录的目录中,文件名不变 4. 兼容三方的压缩解...

    juuluu zip文件加解压工具 v2.7

    【描述】"这款zip文件加压解压工具使用java开发"表明它利用了Java的强大功能和跨平台特性。Java是一种广泛使用的编程语言,以其“一次编写,到处运行”的理念著称。开发者选择Java作为基础,可能是因为它能够提供...

    linux加压解压命令集

    `zip` 和 `unzip` 用于处理 `.zip` 文件格式。 - **压缩**: ```bash zip FileName.zip DirName ``` - **解压缩**: ```bash unzip FileName.zip ``` #### 6. `rar` 命令 `rar` 是一种专有的文件压缩格式...

    700套高级简历模板(解压密码:intern021)

    2. "简历模板.rar" - 这是实际包含700套简历模板的压缩文件,使用“简历模板.rar”扩展名,意味着它是RAR格式的压缩包,需要相应的解压缩软件(如WinRAR或7-Zip)才能打开并访问其中的内容。 从这些信息中,我们...

    超级兔子加压板 加压板

    超级兔子加压板可能采用了类似LZ77或LZ78的字典压缩算法,或者更先进的DEFLATE(用于ZIP格式)或BZip2算法,这些方法可以将文件大小显著减小。 2. 压缩级别:不同的压缩软件提供多种压缩级别,用户可以根据需要选择...

    用于加压解压文件工具winRar

    5. **自解压文件**:WinRAR可以创建自解压文件(.exe),这使得接收者无需安装WinRAR也能解压缩文件,方便了文件的分发。 6. **文件修复功能**:如果RAR或ZIP文件受到损害,WinRAR内置的文件修复工具可以帮助尝试...

    Qt之QZipReader解压文件

    在Qt库中,QZipReader是一个非常有用的工具类,它提供了读取和解压ZIP格式压缩文件的功能。本文将深入探讨QZipReader的使用方法、关键API以及在实际开发中的应用,帮助你理解和掌握如何在Qt环境中解压文件。 首先,...

    Jmeter-pluginsmanager、JMeterPlugins-Standard.zip

    将文件夹解压,里面的JAR包放到jmeter目录下lib/ext下 将文件夹解压,里面的JAR包放到jmeter目录下lib/ext下 将文件夹解压,里面的JAR包放到jmeter目录下lib/ext下 用于如JMETER阶梯加压场景 插件

    SecureCRT.zip破解版

    下载后解压,打开加压包,找到SecureFX.exe。输入IP和端口可以连接服务器。点击左上角的“打开SecureCRT”,输入IP和端口可以查看日志,部署环境等

    apache-jmeter-5.4.3.zip

    apache-jmeter-5.4.3.zip,含阶梯加压线程,各种监控插件等,解压可用

    Android实现文件解压带进度条功能

    解压的工具类 package com.example.videodemo.zip; public class ZipProgressUtil { /*** * 解压通用方法 ... * 加压监听 */ public static void UnZipFile(final String zipFileString, final String outPat

    jszip-in-vue:在vue.js中使用jszip对文件进行加压和解压的示例

    我这里主要是结合项目的需求然后抽离出来的demo,主要是对图片的加压和解压 解压 使用.loadAsync(data)可以加载zip文件,data必须是二进制流,我这里是使用html原生的input上传文件来获取文件流,如果需要读取本地...

    BlazeMeter-4.5.1-0.zip

    BlazeMeter是一款脚本录制工具,录制的脚本可以导入jmeter,是badboy的替代品,喜欢的可以尝试下。先解压,再将加压后的文件夹拖入chrome://extensions/页面,即安装完成。

Global site tag (gtag.js) - Google Analytics