Java压缩文件工具类ZipUtil使用方法代码示例
本文实例通过Java的Zip输入输出流实现压缩和解压文件,前一部分代码实现获取文件路径,压缩文件名的更改等,具体如下:
packagecom.utility.zip;
importjava.io.BufferedInputStream;
importjava.io.BufferedOutputStream;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.util.zip.ZipEntry;
importjava.util.zip.ZipInputStream;
importjava.util.zip.ZipOutputStream;
importcom.utility.io.IOUtil;
/**
*通过Java的Zip输入输出流实现压缩和解压文件
*
*@authorliujiduo
*
*/
publicfinalclassZipUtil{
privateZipUtil(){
//empty
}
/**
*压缩文件
*
*@paramfilePath
*待压缩的文件路径
*@return压缩后的文件
*/
publicstaticFilezip(StringfilePath){
Filetarget=null;
Filesource=newFile(filePath);
if(source.exists()){
//压缩文件名=源文件名.zip
StringzipName=source.getName()+".zip";
target=newFile(source.getParent(),zipName);
if(target.exists()){
target.delete();
//删除旧的文件
}
FileOutputStreamfos=null;
ZipOutputStreamzos=null;
try{
fos=newFileOutputStream(target);
zos=newZipOutputStream(newBufferedOutputStream(fos));
//添加对应的文件Entry
addEntry("/",source,zos);
}
catch(IOExceptione){
thrownewRuntimeException(e);
}
finally{
IOUtil.closeQuietly(zos,fos);
}
}
returntarget;
}
/**
*扫描添加文件Entry
*
*@parambase
*基路径
*
*@paramsource
*源文件
*@paramzos
*Zip文件输出流
*@throwsIOException
*/
privatestaticvoidaddEntry(Stringbase,Filesource,ZipOutputStreamzos)
throwsIOException{
//按目录分级,形如:/aaa/bbb.txt
Stringentry=base+source.getName();
if(source.isDirectory()){
for(Filefile:source.listFiles()){
//递归列出目录下的所有文件,添加文件Entry
addEntry(entry+"/",file,zos);
}
}else{
FileInputStreamfis=null;
BufferedInputStreambis=null;
try{
byte[]buffer=newbyte[1024*10];
fis=newFileInputStream(source);
bis=newBufferedInputStream(fis,buffer.length);
intread=0;
zos.putNextEntry(newZipEntry(entry));
while((read=bis.read(buffer,0,buffer.length))!=-1){
zos.write(buffer,0,read);
}
zos.closeEntry();
}
finally{
IOUtil.closeQuietly(bis,fis);
}
}
}
/**
*解压文件
*
*@paramfilePath
*压缩文件路径
*/
publicstaticvoidunzip(StringfilePath){
Filesource=newFile(filePath);
if(source.exists()){
ZipInputStreamzis=null;
BufferedOutputStreambos=null;
try{
zis=newZipInputStream(newFileInputStream(source));
ZipEntryentry=null;
while((entry=zis.getNextEntry())!=null
&&!entry.isDirectory()){
Filetarget=newFile(source.getParent(),entry.getName());
if(!target.getParentFile().exists()){
//创建文件父目录
target.getParentFile().mkdirs();
}
//写入文件
bos=newBufferedOutputStream(newFileOutputStream(target));
intread=0;
byte[]buffer=newbyte[1024*10];
while((read=zis.read(buffer,0,buffer.length))!=-1){
bos.write(buffer,0,read);
}
bos.flush();
}
zis.closeEntry();
}
catch(IOExceptione){
thrownewRuntimeException(e);
}
finally{
IOUtil.closeQuietly(zis,bos);
}
}
}
publicstaticvoidmain(String[]args){
StringtargetPath="E:\\Win7壁纸";
Filefile=ZipUtil.zip(targetPath);
System.out.println(file);
ZipUtil.unzip("F:\\Win7壁纸.zip");
}
}
下面是通过IO流工具类实现关闭一个或多个流对象的Java语言描述,获取可关闭的流对象列表,具体如下:
packagecom.utility.io;
importjava.io.Closeable;
importjava.io.IOException;
/**
*IO流工具类
*
*@authorliujiduo
*
*/
publicclassIOUtil{
/**
*关闭一个或多个流对象
*
*@paramcloseables
*可关闭的流对象列表
*@throwsIOException
*/
publicstaticvoidclose(Closeable...closeables)throwsIOException{
if(closeables!=null){
for(Closeablecloseable:closeables){
if(closeable!=null){
closeable.close();
}
}
}
}
/**
*关闭一个或多个流对象
*
*@paramcloseables
*可关闭的流对象列表
*/
publicstaticvoidcloseQuietly(Closeable...closeables){
try{
close(closeables);
}
catch(IOExceptione){
//donothing
}
}
}
总结
以上就是本文关于Java压缩文件工具类ZipUtil使用方法代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。