caitong
caitong
语源科技BlogJava
::
首页
::
新随笔
::
联系
::
聚合
::
管理
::
12 随笔 :: 0 文章 :: 0 评论 :: 0 Trackbacks
<
2009年6月
>
日
一
二
三
四
五
六
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
常用链接
我的随笔
我的评论
我的参与
留言簿
给我留言
查看公开留言
查看私人留言
随笔档案
2009年6月 (11)
搜索
最新评论
阅读排行榜
1. 如何在java中使用dll方法(2160)
2. lucene 2.4.1 重建index测试记录(1544)
3. Hadoop与Cache Pool 架构关系与区别(1482)
4. java从入门到精通的相关知识与资料(1465)
5. 用JDK 6.0中基于StAX分析XML数据(1463)
评论排行榜
1. Hadoop与Cache Pool 架构关系与区别(0)
2. 如何在java中使用dll方法(0)
3. 上班族杀手级病---颈椎病(0)
4. 十分钟学会Java RMI (0)
5. 用JDK 6.0中基于StAX分析XML数据(0)
使用java.util.zip实现文件压缩和解压
import
java.io.
*
;
import
java.util.zip.
*
;
/** */
/**
*功能:zip压缩、解压
*说明:本程序通过ZipOutputStream和ZipInputStream实现了zip压缩和解压功能.
*问题:由于java.util.zip包并不支持汉字,当zip文件中有名字为中文的文件时
, author by
http://www.bt285.cn
http://www.5a520.cn
* 就会出现异常:"Exception in thread "main " java.lang.IllegalArgumentException
* at java.util.zip.ZipInputStream.getUTF8String(ZipInputStream.java:285)
*解决:
* 方法1、修改import java.util.zip.ZipInputStream和ZipOutputStream.
* java.util.zip只支持UTF-8,Ant里面可以指定编码.
* 方法2、使用Apache Ant里提供的zip工具。
* 不使用java.util.zip的包,把ant.jar放到classpath中.
* 程序中使用import org.apache.tools.zip.*;
*
*仅供编程学习参考.
*
*
@author
Winty
*@date 2008-8-3
*@Usage:
* 压缩:java Zip -zip "directoryName"
* 解压:java Zip -unzip "fileName.zip"
*/
public
class
Zip
{
private
ZipInputStream zipIn;
//
解压Zip
private
ZipOutputStream zipOut;
//
压缩Zip
private
ZipEntry zipEntry;
private
static
int
bufSize;
//
size of bytes
private
byte
[] buf;
private
int
readedBytes;
public
Zip()
{
this
(
512
);
}
public
Zip(
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;
try
{
this
.zipIn
=
new
ZipInputStream (
new
BufferedInputStream(
new
FileInputStream(unZipfileName)));
while
((
this
.zipEntry
=
this
.zipIn.getNextEntry())
!=
null
)
{
file
=
new
File(
this
.zipEntry.getName());
//
System.out.println(file);
//
/
if
(
this
.zipEntry.isDirectory())
{
file.mkdirs();
}
else
{
//
如果指定文件的目录不存在,则创建之.
File parent
=
file.getParentFile();
if
(
!
parent.exists())
{
parent.mkdirs();
}
fileOut
=
new
FileOutputStream(file);
while
((
this
.readedBytes
=
this
.zipIn.read(
this
.buf) )
>
0
)
{
fileOut.write(
this
.buf ,
0
,
this
.readedBytes );
}
fileOut.close();
}
this
.zipIn.closeEntry();
}
}
catch
(IOException ioe)
{
ioe.printStackTrace();
}
}
//
设置缓冲区大小
public
void
setBufSize(
int
bufSize)
{
this
.bufSize
=
bufSize;
}
//
测试Zip类
public
static
void
main(String[] args)
throws
Exception
{
if
(args.length
==
2
)
{
String name
=
args[
1
];
Zip zip
=
new
Zip();
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 Zip -zip http://www.bt285.cn /directoryName
"
);
System.out.println(
"
解压:java Zip -unzip http://www.feng123.com /fileName.zip
"
);
throw
new
Exception(
"
Arguments error!
"
);
}
}
}
posted on 2009-06-04 21:13
caitong
阅读(1427)
评论(0)
编辑
收藏
Powered by:
语源科技BlogJava
Copyright © caitong