在某些项目中,需要对文件进行打包,解包。通过网上学习,写了一个压缩、解压的工具类,方便后续使用,可供参考。代码如下:
package com.icss.dem.sdk;
import java.io.BufferedOutputStream;
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.Enumeration;
import java.util.List;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
import com.icss.dem.conf.SystemConfig;
import com.icss.pangu.logging.Log;
import com.icss.pangu.logging.LogFactory;
import com.icss.pangu.util.string.StringUtil;
/**
* <p>Title: 文件打包解包工具类</p>
*/
public class FileZipImpl {
private static Log log = LogFactory.getLog(FileZipImpl.class);
/**
* 数据打包压缩
* @param fileList 文件列表
* @param batchNumber 批次号
* @throws Exception
* @return 返回压缩的文件
*/
public static File zipFile(List fileList, String batchNumber) throws Exception
{
byte b[] = new byte[512];
String fileName = batchNumber+ SystemConfig.ZIP_FILE_TYPE;
log.info("===fileName===" + fileName);
File zipFile = new File("f:/" + fileName);
FileOutputStream fileOutputStream;
ZipOutputStream out = null;
CheckedOutputStream cs = null;
try {
fileOutputStream = new FileOutputStream(zipFile);
// 定义文件输出流检查
cs = new CheckedOutputStream(fileOutputStream,new CRC32());
// 定义输出的zip流对象
out = new ZipOutputStream(new BufferedOutputStream(cs));
for (int i = 0; i < fileList.size(); i++) {
/*
* 此部分代码为传递文件路径
*/
// InputStream in = new FileInputStream((String) fileList.get(i));
// log.info("filePath=="+((String)fileList.get(i)));
// String tempFileName = ((String)fileList.get(i)).replace(File.separatorChar, '/');
//下面部分为传递文件对象
InputStream in = new FileInputStream((File) fileList.get(i));
log.info("filePath=="+((File)fileList.get(i)).getAbsolutePath());
String tempFileName = ((File)fileList.get(i)).getAbsolutePath().replace(File.separatorChar, '/');
tempFileName = tempFileName.substring(tempFileName.indexOf("/") + 1);
ZipEntry e = new ZipEntry(tempFileName);
out.putNextEntry(e);
int len = 0;
while ((len = in.read(b)) != -1) {
out.write(b, 0, len);
}
out.closeEntry();
}
out.close();
log.info("文件压缩成功");
} catch (FileNotFoundException e1) {
log.error("文件未找到",e1);
throw new Exception("文件未找到");
} catch (IOException e2) {
log.error("文件IO出现异常",e2);
throw new Exception("文件IO出现异常");
} finally{
if(null != out)
out.close();
if(null != cs)
cs.close();
}
return zipFile;
}
/**
* 解压文件
* @param zipFile 传入的.dem文件
* @return 返回文件列表
*/
public static List unZipFile(ZipFile zipFile)throws Exception
{
List list = new ArrayList();
//临时解压文件目录
String unZipFilePath = SystemConfig.TEMP_UNZIP_PATH;
File tempPath = new File(unZipFilePath);
if(tempPath.exists() != true)
tempPath.mkdir();
String zipFileName = zipFile.getName();
log.info("===zipfileName====" + zipFileName);
if(zipFileName.indexOf(SystemConfig.ZIP_FILE_TYPE) == -1)
{
log.error("所传入文件格式不正确");
throw new Exception("所传入文件格式不正确");
}
try{
Enumeration e = zipFile.entries();
ZipEntry zipEntry = null;
createDirectory(unZipFilePath, "");
while (e.hasMoreElements()) {
zipEntry = (ZipEntry) e.nextElement();
log.info("解压文件名称: " + zipEntry.getName());
if (zipEntry.isDirectory()) {
String name = zipEntry.getName();
name = name.substring(0, name.length() - 1);
File f = new File(unZipFilePath + File.separator + name);
f.mkdir();
} else {
String fileName = zipEntry.getName();
if (fileName.indexOf("/") != -1) {
createDirectory(unZipFilePath, fileName.substring(0,
fileName.lastIndexOf("/")));
}
File unZipFile = new File(unZipFilePath + zipEntry.getName());
unZipFile.createNewFile();
InputStream in = zipFile.getInputStream(zipEntry);
FileOutputStream out = new FileOutputStream(unZipFile);
byte[] by = new byte[1024];
int c;
while ((c = in.read(by)) != -1) {
out.write(by, 0, c);
}
out.close();
in.close();
list.add(unZipFile);
}
}
} catch (FileNotFoundException e1) {
log.error("解压文件未找到",e1);
throw new Exception("解压文件未找到");
} catch (IOException e2) {
log.error("文件IO出现异常",e2);
throw new Exception("文件IO出现异常");
} finally{
}
return list;
}
/**
*
*/
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 = StringUtil.convertToArray(subDirectory, "/");
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 ex) {
}
}
public static void main(String[] args) throws Exception {
List list = new ArrayList();
File file1 = new File("F:/pic/1.jpg");
File file2 = new File("F:/pic/2.jpg");
//String file1="F:/pic/1.jpg";
//String file2="F:/pic/2.jpg";
list.add(file1);
list.add(file2);
try {
//压缩文件
//FileZipImpl.zipFile(list, "123");
//解压文件
FileZipImpl.unZipFile(new ZipFile("F:/123.dem"));
} catch (IOException e) {
// e.printStackTrace();
}
}
}
分享到:
相关推荐
总结,Java的`java.util.zip`包提供了解决ZIP文件压缩和解压需求的工具。通过`ZipOutputStream`和`ZipInputStream`,我们可以方便地处理ZIP文件,无论是创建新的ZIP文件,还是读取和提取已有的ZIP文件。同时,这些...
文件压缩与解压是计算机操作中的常见任务,它涉及到数据存储和传输的效率问题。本文将深入探讨这一主题,从基本概念、常见的压缩格式、压缩原理到如何进行压缩与解压,以及相关的实用工具。 首先,文件压缩是为了...
在C#编程中,压缩和解压缩文件是常见的任务,特别是在数据存储、文件传输和备份等领域。本示例将深入探讨如何使用C#实现这一功能,主要涉及`System.IO.Compression`命名空间中的ZipArchive类。 首先,让我们了解C#...
以下是一个简单的使用ZipArchive类进行文件压缩的例子: ```csharp using System.IO; using System.IO.Compression; public static void CompressFolder(string sourceFolderPath, string destinationZipFilePath)...
文件压缩与解压是计算机操作中的常见任务,它允许我们将大量数据进行减小体积的处理,以便于存储、传输或分享。在IT领域,我们通常使用各种压缩算法和工具来完成这一过程。本文将深入探讨如何使用Java中的`ZipFile`...
总的来说,zipwrap是一个基于zlib库的文件压缩解压工具,它的特点是开源、可编译、可运行,并具有良好的可扩展性和跨平台性。无论你是普通用户还是开发者,zipwrap都能为你提供高效、灵活的文件管理方案。了解并掌握...
使用它进行文件压缩和解压缩的方法与.NET框架的API相似,但提供了更多自定义选项。 #### Ionic.Zlib Ionic.Zlib是另一个流行的库,它提供了.NET框架中没有的DEFLATE算法的实现,并且兼容GZipStream和DeflateStream...
这个"Oracle P/L SQL实现文件压缩、解压功能"的资源,包含了一个名为`UTL_ZIP.plb`的PL/SQL包体以及一个`ZIP包头说明和调用例子.txt`的文本文件,这将帮助我们理解如何在Oracle环境中处理ZIP文件。 `UTL_ZIP`是...
本示例中的"C# 压缩解压文件 demo"利用了特定的dll库,可能是SharpZipLib、System.IO.Compression(.NET Framework自带)或者第三方库如DotNetZip。这些库提供了易于使用的API,使得在Visual Studio 2013中处理压缩...
在IT领域,文件压缩是一种常见的数据管理技术,用于减少文件大小,便于存储、传输和分享。Zip格式是最常用的文件压缩格式之一,它允许用户将多个文件和文件夹打包成一个单一的Zip档案,大大节省了磁盘空间。本文将...
在C#编程环境中,文件压缩是一项常见的任务,特别是在数据存储、传输或备份时。本教程将深入探讨如何使用C#来实现对特定文件的压缩。我们将主要关注`System.IO.Compression`命名空间中的ZipArchive类,它是.NET ...
Java操作Zip文件主要涉及到对文件和目录的压缩与解压缩,以及在必要时对压缩文件进行加密处理。这里我们重点讨论使用两个库:`zip4j`和`Apache Ant`来实现这些功能。 1. **zip4j库**:`zip4j-1.3.2.jar`是一个用...
以上就是关于“PHP在线快速压缩解压ZIP文件”的核心内容。通过结合PCLZip库和`index.php`,我们可以构建一个用户友好的Web应用,让用户方便地在线处理ZIP文件。记住,确保在实际部署时考虑安全性,例如验证文件类型...
在IT行业中,文件压缩与解压是常见的操作,特别是在数据传输、存储优化和备份场景下。Java作为一种广泛使用的编程语言,提供了丰富的库来处理这样的任务。本资源"基于Java实现的带密码压缩与解压文件类库源码及例子...
在Java编程环境中,解压ZIP压缩文件是一项常见的任务,它涉及到文件I/O操作以及对ZIP文件格式的理解。本文将深入探讨如何使用Java实现这一功能,同时也会提及`UnZip.java`和`UnZip2.java`这两个文件可能包含的实现...
通过这个例子,初学者可以了解如何在C++环境中使用zlib和minizip库来处理ZIP文件,为后续的文件压缩和解压缩工作打下基础。实践中,根据具体需求,还可以扩展到其他文件格式,或者实现更复杂的逻辑,如加密、校验等...
本例子聚焦于如何在iPhone和iPad上进行文件的解压缩操作,这对于优化应用程序性能和节省存储空间至关重要。 在iOS中,我们主要依赖于Foundation框架中的`NSFileManager`, `NSData`, 和 ` zlib` 库来处理压缩文件。`...
首先,我们来看一个基本的例子,该例子展示了如何使用 `GZIPInputStream` 类来读取并解压 `.gz` 文件。下面的代码片段展示了这一过程: ```java try { // 打开压缩文件 String inFilename = "infile.gzip"; ...
网上很少有用VB写的压缩文件的代码,但是,在网络...另外加上了多层文件夹压缩解压。但是,因为时间有限,只是将文件全部读取到缓存处理,所以,针对大文件没有做特别的处理。例子里面有提示,根据需要自己改动一下吧。
本节将详细介绍如何在Delphi 2007中实现流数据的压缩和解压,以及相关的核心概念和技术。 首先,我们需要了解什么是流数据。在计算机科学中,流数据(Stream Data)是指以顺序方式处理或传输的数据序列,它可以是...