事例用的是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();
}
}
}
分享到:
相关推荐
使用apache的第三方包,实现对文件的压缩和解压缩,解决jdk自带的实现中,中文文件名乱码问题,压缩和解压缩时,可以设置文件名的编码方式
java实现霍夫曼(huffman)树的压缩和解压缩,支持对文档的压缩和解压缩
本代码实例演示如何用java语言实现apk文件的压缩和解压缩。
使用java语言实现Huffman对任意文件做到压缩和解压缩,压缩后的文件只能通过解压缩来解压后才能读取
Huffman编码对英文文本的压缩和解压缩
Java文件压缩与解压缩实践是指利用Java编程语言实现对文件或文件夹进行压缩和解压缩操作。以下是该实践的描述: 技术概述: Java文件压缩与解压缩是指将一个或多个文件或文件夹打包成一个压缩文件,或者将压缩文件...
对文件夹进行压缩,和解压缩,效率和WINRAR相当. 是一个非常不错的代码
紧接着《C++ zlib库源码编译及简单使用(VS2019)》后,我们使用minizip+zlib,对多级文件夹进行加密压缩成zip文件,然后对zip文件进行解压缩。 支持WinRAR、360zip等第三方工具解密解压。
java端文件和文件夹的压缩和解压缩。经过测试,通过
使用Java实现文件的压缩和解压缩
本程序实现了利用 Huffman 编码对图像进行无损压缩和解压缩。Huffman 编码是一种基于字符出现频率构建相应前缀码的无损数据压缩算法。 使用方法: 1. 需要安装 OpenCV 和 Numpy 库: pip install opencv-python ...
java中如何实现压缩和解压缩,zip,unzip,java中如何实现压缩和解压缩,zip,unzip
java压缩和解压缩
在这个实战博客中,我们将创建一个简单的Java文件压缩工具,用于创建和解压缩文件归档。我们将深入了解Java编程语言以及Java的压缩和解压缩库,以帮助您构建自己的文件压缩工具。 以下是本实战博客的主要内容: ...
Visual C++源代码 49 如何压缩和解压缩大尺寸文件Visual C++源代码 49 如何压缩和解压缩大尺寸文件Visual C++源代码 49 如何压缩和解压缩大尺寸文件Visual C++源代码 49 如何压缩和解压缩大尺寸文件Visual C++源代码...
为了方便文件的传输和存储,文件压缩和解压缩成为必不可少的工具。因此,本毕设旨在设计一个基于JAVA的文件压缩与解压缩系统。 ## 系统需求 该系统需要实现以下功能: 1. 压缩文件:能够将文件夹中的所有文件压缩...
用java实现huffman编码,Encode.java实现文件的压缩,Decode.java 实现文件的解压缩
不用VCL压缩控件,仅用Delphi XE2 新增的 System.Zip 单元,一行代码即可完成整个文件夹内文件的压缩和解压缩,简单实用。
UPX压缩和解压缩器,不是源码,是工具,可以实现exe文件的压缩和解压缩
Linux系统的文件压缩和解压缩方法.pdf