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使用方法代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。