- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章使用java基础类实现zip压缩和zip解压工具类分享由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
使用java基础类写的一个简单的zip压缩解压工具类 。
package sun.net.helper,
。
import java.io.*; import java.util.logging.Logger; import java.util.zip.*; public class ZipUtil { private final static Logger logger = Logger.getLogger(ZipUtil.class.getName()); private static final int BUFFER = 1024*10,
/** * 将指定目录压缩到和该目录同名的zip文件,自定义压缩路径 * @param sourceFilePath 目标文件路径 * @param zipFilePath 指定zip文件路径 * @return */ public static boolean zip(String sourceFilePath,String zipFilePath){ boolean result=false; File source=new File(sourceFilePath); if(!source.exists()){ logger.info(sourceFilePath+" doesn't exist."); return result; } if(!source.isDirectory()){ logger.info(sourceFilePath+" is not a directory."); return result; } File zipFile=new File(zipFilePath+"/"+source.getName()+".zip"); if(zipFile.exists()){ logger.info(zipFile.getName()+" is already exist."); return result; }else{ if(!zipFile.getParentFile().exists()){ if(!zipFile.getParentFile().mkdirs()){ logger.info("cann't create file "+zipFile.getName()); return result; } } } logger.info("creating zip file..."); FileOutputStream dest=null; ZipOutputStream out =null; try { dest = new FileOutputStream(zipFile); CheckedOutputStream checksum = new CheckedOutputStream(dest, new Adler32()); out=new ZipOutputStream(new BufferedOutputStream(checksum)); out.setMethod(ZipOutputStream.DEFLATED); compress(source,out,source.getName()); result=true; } catch (FileNotFoundException e) { e.printStackTrace(); }finally { if (out != null) { try { out.closeEntry(); } catch (IOException e) { e.printStackTrace(); } try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } if(result){ logger.info("done."); }else{ logger.info("fail."); } return result; } private static void compress(File file,ZipOutputStream out,String mainFileName) { if(file.isFile()){ FileInputStream fi= null; BufferedInputStream origin=null; try { fi = new FileInputStream(file); origin=new BufferedInputStream(fi, BUFFER); int index=file.getAbsolutePath().indexOf(mainFileName); String entryName=file.getAbsolutePath().substring(index); System.out.println(entryName); ZipEntry entry = new ZipEntry(entryName); out.putNextEntry(entry); byte[] data = new byte[BUFFER]; int count; while((count = origin.read(data, 0, BUFFER)) != -1) { out.write(data, 0, count); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { if (origin != null) { try { origin.close(); } catch (IOException e) { e.printStackTrace(); } } } }else if (file.isDirectory()){ File[] fs=file.listFiles(); if(fs!=null&&fs.length>0){ for(File f:fs){ compress(f,out,mainFileName); } } } } 。
/** * 将zip文件解压到指定的目录,该zip文件必须是使用该类的zip方法压缩的文件 * @param zipFile * @param destPath * @return */ public static boolean unzip(File zipFile,String destPath){ boolean result=false; if(!zipFile.exists()){ logger.info(zipFile.getName()+" doesn't exist."); return result; } File target=new File(destPath); if(!target.exists()){ if(!target.mkdirs()){ logger.info("cann't create file "+target.getName()); return result; } } String mainFileName=zipFile.getName().replace(".zip",""); File targetFile=new File(destPath+"/"+mainFileName); if(targetFile.exists()){ logger.info(targetFile.getName()+" already exist."); return result; } ZipInputStream zis =null; logger.info("start unzip file ..."); try { FileInputStream fis= new FileInputStream(zipFile); CheckedInputStream checksum = new CheckedInputStream(fis, new Adler32()); zis = new ZipInputStream(new BufferedInputStream(checksum)); ZipEntry entry; while((entry = zis.getNextEntry()) != null) { int count; byte data[] = new byte[BUFFER]; String entryName=entry.getName(); int index=entryName.indexOf(mainFileName); String newEntryName=destPath+"/"+entryName.substring(index); System.out.println(newEntryName); File temp=new File(newEntryName).getParentFile(); if(!temp.exists()){ if(!temp.mkdirs()){ throw new RuntimeException("create file "+temp.getName() +" fail"); } } FileOutputStream fos = new FileOutputStream(newEntryName); BufferedOutputStream dest = new BufferedOutputStream(fos,BUFFER); while ((count = zis.read(data, 0, BUFFER)) != -1) { dest.write(data, 0, count); } dest.flush(); dest.close(); } result=true; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { if (zis != null) { try { zis.close(); } catch (IOException e) { e.printStackTrace(); } } } if(result){ logger.info("done."); }else{ logger.info("fail."); } return result; } public static void main(String[] args) throws IOException { //ZipUtil.zip("D:/apache-tomcat-7.0.30", "d:/temp"); File zipFile=new File("D:/temp/apache-tomcat-7.0.30.zip"); ZipUtil.unzip(zipFile,"d:/temp") ; } } 。
。
。
另一个压缩解压示例,二个工具大家参考使用吧 。
。
package com.lanp,
。
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipException; import java.util.zip.ZipFile; import java.util.zip.ZipInputStream,
/** * 解压ZIP压缩文件到指定的目录 */ public final class ZipToFile { /** * 缓存区大小默认20480 */ private final static int FILE_BUFFER_SIZE = 20480; private ZipToFile() { } /** * 将指定目录的ZIP压缩文件解压到指定的目录 * @param zipFilePath ZIP压缩文件的路径 * @param zipFileName ZIP压缩文件名字 * @param targetFileDir ZIP压缩文件要解压到的目录 * @return flag 布尔返回值 */ public static boolean unzip(String zipFilePath, String zipFileName, String targetFileDir){ boolean flag = false; //1.判断压缩文件是否存在,以及里面的内容是否为空 File file = null; //压缩文件(带路径) ZipFile zipFile = null; file = new File(zipFilePath + "/" + zipFileName); System.out.println(">>>>>>解压文件【" + zipFilePath + "/" + zipFileName + "】到【" + targetFileDir + "】目录下<<<<<<"); if(false == file.exists()) { System.out.println(">>>>>>压缩文件【" + zipFilePath + "/" + zipFileName + "】不存在<<<<<<"); return false; } else if(0 == file.length()) { System.out.println(">>>>>>压缩文件【" + zipFilePath + "/" + zipFileName + "】大小为0不需要解压<<<<<<"); return false; } else { //2.开始解压ZIP压缩文件的处理 byte[] buf = new byte[FILE_BUFFER_SIZE]; int readSize = -1; ZipInputStream zis = null; FileOutputStream fos = null; try { // 检查是否是zip文件 zipFile = new ZipFile(file); zipFile.close(); // 判断目标目录是否存在,不存在则创建 File newdir = new File(targetFileDir); if (false == newdir.exists()) { newdir.mkdirs(); newdir = null; } zis = new ZipInputStream(new FileInputStream(file)); ZipEntry zipEntry = zis.getNextEntry(); // 开始对压缩包内文件进行处理 while (null != zipEntry) { String zipEntryName = zipEntry.getName().replace('\\', '/'); //判断zipEntry是否为目录,如果是,则创建 if(zipEntry.isDirectory()) { int indexNumber = zipEntryName.lastIndexOf('/'); File entryDirs = new File(targetFileDir + "/" + zipEntryName.substring(0, indexNumber)); entryDirs.mkdirs(); entryDirs = null; } else { try { fos = new FileOutputStream(targetFileDir + "/" + zipEntryName); while ((readSize = zis.read(buf, 0, FILE_BUFFER_SIZE)) != -1) { fos.write(buf, 0, readSize); } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e.getCause()); } finally { try { if (null != fos) { fos.close(); } } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e.getCause()); } } } zipEntry = zis.getNextEntry(); } flag = true; } catch (ZipException e) { e.printStackTrace(); throw new RuntimeException(e.getCause()); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e.getCause()); } finally { try { if (null != zis) { zis.close(); } if (null != fos) { fos.close(); } } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e.getCause()); } } } return flag; } 。
/** * 测试用的Main方法 */ public static void main(String[] args) { String zipFilePath = "C:\\home"; String zipFileName = "lp20120301.zip"; String targetFileDir = "C:\\home\\lp20120301"; boolean flag = ZipToFile.unzip(zipFilePath, zipFileName, targetFileDir); if(flag) { System.out.println(">>>>>>解压成功<<<<<<"); } else { System.out.println(">>>>>>解压失败<<<<<<"); } } 。
} 。
。
最后此篇关于使用java基础类实现zip压缩和zip解压工具类分享的文章就讲到这里了,如果你想了解更多关于使用java基础类实现zip压缩和zip解压工具类分享的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我是一名优秀的程序员,十分优秀!