import
java.io.*;
import
org.apache.tools.zip.*;
import
java.util.Enumeration;
/**
*功能:zip压缩、解压(支持中文文件名)
*说明:本程序通过使用Apache Ant里提供的zip工具org.apache.tools.zip实现了zip压缩和解压功能.
* 解决了由于java.util.zip包不支持汉字的问题。
* 使用java.util.zip包时,当zip文件中有名字为中文的文件时,
* 就会出现异常:"Exception in thread "main " java.lang.IllegalArgumentException
* at java.util.zip.ZipInputStream.getUTF8String(ZipInputStream.java:285)
*注意:
* 1、使用时把ant.jar放到classpath中,程序中使用import org.apache.tools.zip.*;
* 2、Apache Ant 下载地址:[url]http://ant.apache.org/[/url]
* 3、Ant ZIP API:[url]http://www.jajakarta.org/ant/ant-1.6.1/docs/mix/manual/api/org/apache/tools/zip/[/url]
* 4、本程序使用Ant 1.7.1 中的ant.jar
*
*仅供编程学习参考.
*
*@author Winty
*@date 2008-8-3
*@Usage:
* 压缩:java AntZip -zip "directoryName"
* 解压:java AntZip -unzip "fileName.zip"
*/
public
class
AntZip{
private
ZipFile zipFile;
private
ZipOutputStream zipOut; //压缩Zip
private
ZipEntry zipEntry;
private
static
int
bufSize; //size of bytes
private
byte
[] buf;
private
int
readedBytes;
public
AntZip(){
this
(512);
}
public
AntZip(int
bufSize){
this
.bufSize = bufSize;
this
.buf = new
byte
[this
.bufSize];
}
//压缩文件夹内的文件
public
void
doZip(String zipDirectory){//zipDirectoryPath:需要压缩的文件夹名
File file;
File zipDir;
zipDir = new
File(zipDirectory);
String zipFileName = zipDir.getName() + ".zip"
;//压缩后生成的zip文件名
try
{
this
.zipOut = new
ZipOutputStream(new
BufferedOutputStream(new
FileOutputStream(zipFileName)));
handleDir(zipDir , this
.zipOut);
this
.zipOut.close();
}catch
(IOException ioe){
ioe.printStackTrace();
}
}
//由doZip调用,递归完成目录文件读取
private
void
handleDir(File dir , ZipOutputStream zipOut)throws
IOException{
FileInputStream fileIn;
File[] files;
files = dir.listFiles();
if
(files.length == 0){//如果目录为空,则单独创建之.
//ZipEntry的isDirectory()方法中,目录以"/"结尾.
this
.zipOut.putNextEntry(new
ZipEntry(dir.toString() + "/"
));
this
.zipOut.closeEntry();
}
else
{//如果目录不为空,则分别处理目录和文件.
for
(File fileName : files){
//System.out.println(fileName);
if
(fileName.isDirectory()){
handleDir(fileName , this
.zipOut);
}
else
{
fileIn = new
FileInputStream(fileName);
this
.zipOut.putNextEntry(new
ZipEntry(fileName.toString()));
while
((this
.readedBytes = fileIn.read(this
.buf))>0){
this
.zipOut.write(this
.buf , 0 , this
.readedBytes);
}
this
.zipOut.closeEntry();
}
}
}
}
//解压指定zip文件
public
void
unZip(String unZipfileName){//unZipfileName需要解压的zip文件名
FileOutputStream fileOut;
File file;
InputStream inputStream;
try
{
this
.zipFile = new
ZipFile(unZipfileName);
for
(Enumeration entries = this
.zipFile.getEntries(); entries.hasMoreElements();){
ZipEntry entry = (ZipEntry)entries.nextElement();
file = new
File(entry.getName());
if
(entry.isDirectory()){
file.mkdirs();
}
else
{
//如果指定文件的目录不存在,则创建之.
File parent = file.getParentFile();
if
(!parent.exists()){
parent.mkdirs();
}
inputStream = zipFile.getInputStream(entry);
fileOut = new
FileOutputStream(file);
while
(( this
.readedBytes = inputStream.read(this
.buf) ) > 0){
fileOut.write(this
.buf , 0 , this
.readedBytes );
}
fileOut.close();
inputStream.close();
}
}
this
.zipFile.close();
}catch
(IOException ioe){
ioe.printStackTrace();
}
}
//设置缓冲区大小
public
void
setBufSize(int
bufSize){
this
.bufSize = bufSize;
}
//测试AntZip类
public
static
void
main(String[] args)throws
Exception{
if
(args.length==2){
String name = args[1];
AntZip zip = new
AntZip();
if
(args[0].equals("-zip"
))
zip.doZip(name);
else
if
(args[0].equals("-unzip"
))
zip.unZip(name);
}
else
{
System.out.println("Usage:"
);
System.out.println("压缩:java AntZip -zip directoryName"
);
System.out.println("解压:java AntZip -unzip fileName.zip"
);
throw
new
Exception("Arguments error!"
);
}
}
}
文章来源:http://wintys.blog.51cto.com/425414/90878
分享到:
相关推荐
import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.apache.tools.zip.ZipOutputStream; 需要的jar包,压缩zip包和解压zip包,远程打包,文件批量下载、文件批量上传
主要使用该jar包中的以下类: org.apache.tools.zip.ZipEntry; org.apache.tools.zip.ZipFile; org.apache.tools.zip.ZipOutputStream;
import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.apache.tools.zip.ZipOutputStream; /** * * 类名: ZipUtil.java * 描述:压缩/解压缩zip包处理类 * 创建...
import org.apache.tools.*; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; 等
java压缩中文处理使用org.apache.tools.zip已经打包成jar 只要放在LIB文件夹下,然后在JSP 或 JAVA 里引用即可。 <%@ page language="java" import="java.sql.*,java.io.*,org.apache.tools.zip.Zip" pageEncoding=...
使用我自己包,直接放到WEB-INF\classes下解压即可, 在程序中加上 outf.setEncoding("gbk");即可 下面是我的多个文件压缩成一个的压缩,参考 String zipf="D:\\xxx\\xx\\xxb\\xx\\xz.zip"; //---------修改路径---...
总之,`ant-1.7.1(org.apache.tools.zip.ZipOutputStream).zip`这个压缩包展示了在使用Apache Ant处理包含中文文件名的Zip文件时,如何通过设置正确的字符编码来避免乱码问题。理解和掌握这些知识点对于Java开发者来...
解压缩ZIP文件主要涉及`java.util.zip.ZipInputStream`和`org.apache.tools.zip.ZipEntry`。以下是一般过程: - 创建`ZipInputStream`对象,基于一个输入流(如FileInputStream),指向ZIP文件。 - 循环读取ZIP...
这篇博客“org.apache.tools.zip.*和org.apache.commons.httpclient.*实现远程文件打包下载,支持中文文件名”探讨了如何利用Apache开源库来实现这个功能。Apache的`tools.zip`和`commons-httpclient`模块为开发者...
org.apache.tools.zip.ZipFile org.apache.tools.zip.ZipLong org.apache.tools.ant.Executor org.apache.tools.ant.Location org.apache.tools.tar.TarEntry org.apache.tools.tar.TarUtils org.apache.tools...
解决压缩中文名乱码的jar包
3. **readline-6.2.tar.gz**: readline库提供了命令行输入编辑功能,使得用户在使用Apache的命令行工具时可以方便地进行历史浏览和编辑操作。 4. **pcre-8.41.tar.gz**: PCRE (Perl Compatible Regular Expressions...
Apache Ant Zip 2.3.jar 特别关注的是处理ZIP文件格式的操作,包括创建、解压和操作ZIP档案中的文件。这个特定的版本2.3可能包含了一些特定的修复或功能改进相对于之前的版本。由于在Maven仓库中找不到这个特定的...
标题中的"org.apache.zip"指的是Apache软件基金会下的一个与压缩处理相关的组件,它通常用于Java环境中处理ZIP格式的文件和流。Apache Commons Compress库提供了对多种压缩格式的支持,包括ZIP,而"javamail"则是一...
这里我们重点讨论使用两个库:`zip4j`和`Apache Ant`来实现这些功能。 1. **zip4j库**:`zip4j-1.3.2.jar`是一个用Java编写的库,它提供了方便的API来处理Zip文件。以下是一些关键功能: - **压缩文件和目录**:你...
这种方法利用了Apache Ant库中的`org.apache.tools.zip.ZipFile`类来实现解压功能。在实际应用中,这种方法非常实用,尤其是在需要处理复杂ZIP文件结构的情况下。 #### 方法参数 该方法接受三个参数: 1. **old...