事例用的是org.apache.tools.zip包下面的一些类,jdk自带的zip工具类当文件名是中文的情况下会出现问题,本事例可以递归压缩文件和解压文件,功能上和现在常用的一些压缩软件功能类似,暂时没有做性能上的对比。
package zip;
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.Enumeration;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;
@SuppressWarnings("rawtypes")
public class TestAntZip {
public static void main(String[] args) {
//Unzip();
//ZipFile();
}
/**
* 压缩文件或者文件夹
*/
private static void ZipFile() {
try {
String inputStr = "D:/testzip";
File input = new File(inputStr);
String singleFile = null;
if (input.isFile()) {
int temp = input.getName().lastIndexOf(".");
singleFile = input.getName().substring(0, temp);
}
String basepath = input.getName();
String zipfilename = singlefile != null ? singlefile : input.getName();
ZipOutputStream zos = new ZipOutputStream(new File(input.getParent(), zipfilename + ".zip"));
zos.setEncoding("UTF-8");
PutEntry(zos, input, basepath);
zos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private static void PutEntry(ZipOutputStream zos, File file, String basepath) throws IOException, FileNotFoundException {
FileInputStream is = null;
byte[] b = new byte[1024 * 10];
int tmp = 0;
basepath += File.separator;
if (file.isFile()) {
zos.putNextEntry(new ZipEntry(basepath));
is = new FileInputStream(file);
while ((tmp = is.read(b, 0, b.length)) != -1) {
zos.write(b, 0, tmp);
}
is.close();
} else {
for (File f : file.listFiles()) {
PutEntry(zos, f, basepath + f.getName());
}
}
zos.flush();
}
/**
* 解压缩
*/
private static void Unzip() {
String file = "d:/testzip.zip";
File zipFile = new File(file);
int i = file.lastIndexOf(".");
File filePath = new File(file.substring(0, i));
if (!filePath.exists()) {
filePath.mkdirs();
}
File temp = null;
try {
ZipFile zip = new ZipFile(zipFile, "UTF-8");
ZipEntry entry = null;
byte[] b = new byte[1024 * 10];
int tmp = 0;
FileOutputStream os = null;
InputStream is = null;
for (Enumeration enu = zip.getEntries(); enu.hasMoreElements();) {
entry = (ZipEntry) enu.nextElement();
is = zip.getInputStream(entry);
temp = new File(filePath.getParent() + File.separator + entry.getName());
if (!temp.getParentFile().exists()) {
temp.getParentFile().mkdirs();
}
os = new FileOutputStream(temp);
while ((tmp = is.read(b, 0, b.length)) != -1) {
os.write(b, 0, tmp);
}
os.flush();
os.close();
is.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
在Java编程中,有时我们需要对文件或文件夹进行压缩和解压缩操作,这在数据传输、备份或存储优化等场景中十分常见。Apache提供了一个强大的第三方库——Commons Compress,它可以帮助我们处理各种格式的压缩文件,...
在Java编程中,压缩和解压缩文件是常见的任务,特别是在处理大量数据或传输文件时。本文将深入探讨如何使用Java来处理压缩文件,特别是针对标题提及的“java压缩文件以及文件夹”。我们将主要关注`ZipCompressor....
在Java编程语言中,压缩和解压缩文件是常见的任务,特别是在数据备份、文件传输和存储优化的场景下。本文将详细讲解如何运用Java来实现文件夹的压缩,并将其备份到目标文件夹。首先,我们需要了解Java中用于处理压缩...
ame()); tOut.putArchiveEntry(tarEntry);...通过引入该库,我们可以轻松地在 Java 程序中实现文件和文件夹的压缩与解压缩功能。在实际开发中,注意错误处理、资源管理以及安全性等方面,以确保程序的健壮性和安全性。
Java中的`GZIPOutputStream`和`GZIPInputStream`用于对文件进行GZIP压缩和解压缩。 4. **源代码实现**:实践中提供的源代码展示了如何使用Java API来实现文件和目录的压缩与解压缩。这可能包括读取文件,创建压缩流...
java实现霍夫曼(huffman)树的压缩和解压缩,支持对文档的压缩和解压缩
在IT行业中,文件压缩是一种常见的数据处理方式,用于减少文件或文件夹的大小,以便于存储、传输和分享。在本例中,我们关注的是使用C++编程语言进行文件夹压缩的技术。C++是一种强大的、通用的编程语言,它允许低...
通过这个类,开发者可以方便地进行文件和文件夹的压缩和解压缩。 2. **ZipFile类**: - **CreateFromDirectory**:用于将一个文件夹及其内容压缩到ZIP文件。 - **ExtractToDirectory**:将ZIP文件解压缩到指定的...
紧接着《C++ zlib库源码编译及简单使用(VS2019)》后,我们使用minizip+zlib,对多级文件夹进行加密压缩成zip文件,然后对zip文件进行解压缩。 支持WinRAR、360zip等第三方工具解密解压。
### Huffman编码对英文文本的压缩和解压缩 #### 概述 Huffman编码是一种广泛应用于数据压缩领域的编码方法,尤其适用于英文文本的压缩与解压缩。这种方法基于变长编码原理,通过对不同字符出现频率的统计,构建出...
在实际开发中,你可能需要处理更复杂的情况,比如多个APK文件的压缩和解压缩,或者在压缩过程中进行加密和校验等。此外,为了提高性能,可以考虑使用缓冲流和多线程处理。总之,Java提供的`java.util.zip`库为处理...
Java文件压缩与解压缩实践是指利用Java编程语言实现对文件或文件夹进行压缩和解压缩操作。以下是该实践的描述: 技术概述: Java文件压缩与解压缩是指将一个或多个文件或文件夹打包成一个压缩文件,或者将压缩文件...
Huffman编码是一种基于频率的无损数据压缩算法,由David A. Huffman在1952年提出。它的基本思想是创建一...在Java中实现这一算法可以加深对文件操作、数据结构和位操作的理解,同时也为开发自己的压缩工具提供了基础。
在Java中,我们可以使用java.util.zip包中的ZipOutputStream和ZipInputStream类来对Zip文件进行压缩和解压缩操作。 **压缩Zip文件:** 要压缩一组文件到一个Zip文件,我们需要创建一个ZipOutputStream实例,然后...
Java提供了`java.util.zip`包来进行文件的压缩和解压缩。 ##### 代码实现: ```java public static void zip(String zipFileName, String inputPath) { File inputFile = new File(inputPath); ZipOutputStream ...
Java实现文件夹解压和压缩是指通过Java语言对文件夹进行压缩和解压缩操作,以下是相关知识点的总结: 1. Java中的文件夹解压和压缩操作可以通过java.util.zip包中的ZipInputStream和ZipOutputStream类来实现。 2....
根据提供的文件标题、描述、标签以及部分内容,我们可以总结并扩展出以下有关文件夹压缩与解压缩的相关知识点: ### 文件夹压缩与解压缩技术概述 在计算机科学领域中,文件压缩是一种减少文件占用存储空间的技术...
【作品名称】:基于 C++实现对文件的压缩和解压缩->主要利用贪心算法实现压缩 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目...
Huffman 编码对英文文本的压缩和解压缩 本实验的目的是掌握 Huffman 编码的原理,并使用 VC++ 6.0 开发环境来实现对英文文本的压缩和解压缩。实验要求学生掌握 Huffman 编码的原理、VC++ 开发环境的使用、C 语言...
例如,确保在处理大文件时避免内存溢出,或者使用多线程加速压缩和解压缩过程。此外,设计良好的API应该具有良好的文档和示例,以便其他开发者能轻松地理解和使用。 总结来说,"文件压缩和解压缩需求(支持加解密)...