失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > java zip 压缩文件夹_java来实现zip压缩文件或者文件夹

java zip 压缩文件夹_java来实现zip压缩文件或者文件夹

时间:2023-05-03 09:02:35

相关推荐

java zip 压缩文件夹_java来实现zip压缩文件或者文件夹

三种不错的方法:

1、jdk自带的包java.util.zip.ZipOutputStream,不足之处,文件(夹)名称带中文时,

出现乱码问题,实现代码如下:

/**

*功能:把sourceDir目录下的所有文件进行zip格式的压缩,保存为指定zip文件

*@param

sourceDir如果是目录,eg:D:\\MyEclipse\\first\\testFile,则压缩目录下所有文件;

*

如果是文件,eg:D:\\MyEclipse\\first\\testFile\\aa.zip,则只压缩本文件

*@param

zipFile最后压缩的文件路径和名称,eg:D:\\MyEclipse\\first\\testFile\\aa.zip

*/

publicFiledoZip(StringsourceDir,StringzipFilePath)

throws

IOException{

Filefile=newFile(sourceDir);

FilezipFile=

newFile(zipFilePath);

ZipOutputStreamzos=null;

try{

//

创建写出流操作

OutputStreamos=new

FileOutputStream(zipFile);

BufferedOutputStreambos=new

BufferedOutputStream(os);

zos=new

ZipOutputStream(bos);

StringbasePath=null;

//

获取目录

if(file.isDirectory()){

basePath=

file.getPath();

}else{

basePath=

file.getParent();

}

zipFile(file,basePath,

zos);

}finally{

if(zos!=null)

{

zos.closeEntry();

zos.close();

}

}

return

zipFile;

}

/**

*@paramsource源文件

*@parambasePath

*@paramzos

*/

privatevoidzipFile(Filesource,StringbasePath,ZipOutputStream

zos)

throwsIOException{

File[]files=null;

if

(source.isDirectory()){

files=source.listFiles();

}else

{

files=newFile[1];

files[0]=

source;

}

InputStreamis=null;

String

pathName;

byte[]buf=newbyte[1024];

intlength=

0;

try{

for(Filefile:files){

if(file.isDirectory())

{

pathName=file.getPath().substring(basePath.length()+1)+

"/";

zos.putNextEntry(newZipEntry(pathName));

zipFile(file,

basePath,zos);

}else{

pathName=

file.getPath().substring(basePath.length()+1);

is=new

FileInputStream(file);

BufferedInputStreambis=new

BufferedInputStream(is);

zos.putNextEntry(new

ZipEntry(pathName));

while((length=bis.read(buf))>0)

{

zos.write(buf,0,length);

}

}

}

}finally

{

if(is!=null){

is.close();

}

}

}

2、使用org.apache.tools.zip.ZipOutputStream,代码如下,

Java代码:

packagenet.szh.zip;

importjava.io.BufferedInputStream;

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.FileOutputStream;

importjava.util.zip.CRC32;

importjava.util.zip.CheckedOutputStream;

importorg.apache.tools.zip.ZipEntry;

importorg.apache.tools.zip.ZipOutputStream;

publicclassZipCompressor{

staticfinalintBUFFER=8192;

privateFilezipFile;

publicZipCompressor(StringpathName){

zipFile=newFile(pathName);

}

publicvoidcompress(StringsrcPathName){

Filefile=newFile(srcPathName);

if(!file.exists())

thrownewRuntimeException(srcPathName+"不存在!");

try{

FileOutputStreamfileOutputStream=newFileOutputStream(zipFile);

CheckedOutputStreamcos=newCheckedOutputStream(fileOutputStream,

newCRC32());

ZipOutputStreamout=newZipOutputStream(cos);

Stringbasedir="";

compress(file,out,basedir);

out.close();

}catch(Exceptione){

thrownewRuntimeException(e);

}

}

privatevoidcompress(Filefile,ZipOutputStreamout,Stringbasedir){

/*判断是目录还是文件*/

if(file.isDirectory()){

System.out.println("压缩:"+basedir+file.getName());

pressDirectory(file,out,basedir);

}else{

System.out.println("压缩:"+basedir+file.getName());

pressFile(file,out,basedir);

}

}

/**压缩一个目录*/

privatevoidcompressDirectory(Filedir,ZipOutputStreamout,Stringbasedir){

if(!dir.exists())

return;

File[]files=dir.listFiles();

for(inti=0;i

/*递归*/

compress(files[i],out,basedir+dir.getName()+"/");

}

}

/**压缩一个文件*/

privatevoidcompressFile(Filefile,ZipOutputStreamout,Stringbasedir){

if(!file.exists()){

return;

}

try{

BufferedInputStreambis=newBufferedInputStream(

newFileInputStream(file));

ZipEntryentry=newZipEntry(basedir+file.getName());

out.putNextEntry(entry);

intcount;

bytedata[]=newbyte[BUFFER];

while((count=bis.read(data,0,BUFFER))!=-1){

out.write(data,0,count);

}

bis.close();

}catch(Exceptione){

thrownewRuntimeException(e);

}

}

}

3、可以用ant中的org.apache.tools.ant.taskdefs.Zip来实现,更加简单。

Java代码

packagenet.szh.zip;

importjava.io.File;

importorg.apache.tools.ant.Project;

importorg.apache.tools.ant.taskdefs.Zip;

importorg.apache.tools.ant.types.FileSet;

publicclassZipCompressorByAnt{

privateFilezipFile;

publicZipCompressorByAnt(StringpathName){

zipFile=newFile(pathName);

}

publicvoidcompress(StringsrcPathName){

Filesrcdir=newFile(srcPathName);

if(!srcdir.exists())

thrownewRuntimeException(srcPathName+"不存在!");

Projectprj=newProject();

Zipzip=newZip();

zip.setProject(prj);

zip.setDestFile(zipFile);

FileSetfileSet=newFileSet();

fileSet.setProject(prj);

fileSet.setDir(srcdir);

//fileSet.setIncludes("**/*.java");包括哪些文件或文件夹eg:zip.setIncludes("*.java");

//fileSet.setExcludes(...);排除哪些文件或文件夹

zip.addFileset(fileSet);

zip.execute();

}

}

测试一下

Java代码

packagenet.szh.zip;

publicclassTestZip{

publicstaticvoidmain(String[]args){

ZipCompressorzc=newZipCompressor("E:\\szhzip.zip");

press("E:\\test");

ZipCompressorByAntzca=newZipCompressorByAnt("E:\\szhzipant.zip");

press("E:\\test");

}

}

如果觉得《java zip 压缩文件夹_java来实现zip压缩文件或者文件夹》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。