写点什么

zip 解压缩

用户头像
拾贝
关注
发布于: 3 小时前

1、读取原压缩包文件,解压缩至临时目录

2、对临时目录中处理过的文件进行压缩

压缩:


  public static void zipFile(FtpInfo ftp, String cbZipFileName, String cycleId, String ZipFilePath, String createFilePath) throws Exception {  isChartPathExist(ZipFilePath);  //压缩    String zipFileName = ZipFilePath + cbZipFileName ;  //创建zip输出流  ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));
//创建缓冲输出流 BufferedOutputStream bos = new BufferedOutputStream(out);
File sourceFile = new File(createFilePath);
//调用函数 compress(out, bos, sourceFile, sourceFile.getName());
bos.close(); out.close(); logger.debug("end zip ..."); }


/** * compressed file * * @param out * @param bos * @param sourceFile * @param base * @throws Exception */public static void compress(ZipOutputStream out, BufferedOutputStream bos, File sourceFile, String base) throws Exception { //如果路径为目录(文件夹) if (sourceFile.isDirectory()) {
//取出文件夹中的文件(或子文件夹) File[] flist = sourceFile.listFiles();
if (flist.length == 0)//如果文件夹为空,则只需在目的地zip文件中写入一个目录进入点 { logger.debug(base + "/"); out.putNextEntry(new ZipEntry(base + "/")); } else//如果文件夹不为空,则递归调用compress,文件夹中的每一个文件(或文件夹)进行压缩 { for (int i = 0; i < flist.length; i++) { compress(out, bos, flist[i], flist[i].getName()); } } } else//如果不是目录(文件夹),即为文件,则先写入目录进入点,之后将文件写入zip文件中 { out.putNextEntry(new ZipEntry(base));
try ( FileInputStream fos = new FileInputStream(sourceFile); BufferedInputStream bis = new BufferedInputStream(fos); ) { int tag; logger.debug(base); //将源文件写入到zip文件中 while ((tag = bis.read()) != -1) { bos.write(tag); } } catch (Exception e) { logger.error("IO流异常"); }
}}
复制代码

解压:


/*** 解压到指定目录*/public static void unZipFiles(String zipPath,String descDir)throws IOException{  unZipFiles(new File(zipPath), descDir);}
/** * 解压文件到指定目录 */public static void unZipFiles(File zipFile,String descDir)throws IOException{ File pathFile = new File(descDir); if(!pathFile.exists()) { pathFile.mkdirs(); } //解决zip文件中有中文目录或者中文文件 ZipFile zip = new ZipFile(zipFile, Charset.forName("GBK")); for(Enumeration entries = zip.entries(); entries.hasMoreElements();) { ZipEntry entry = (ZipEntry)entries.nextElement(); String zipEntryName = entry.getName(); InputStream in = zip.getInputStream(entry); String outPath = (descDir+zipEntryName).replaceAll("\\*", "/");; //判断路径是否存在,不存在则创建文件路径 // File file = new File(outPath.substring(0, outPath.lastIndexOf('s'))); // if(!file.exists()) // { // file.mkdirs(); // } //判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压 // if(new File(outPath).isDirectory()) // { // continue; // } //输出文件路径信息 System.out.println(outPath);OutputStream out = new FileOutputStream(outPath);byte[] buf1 = new byte[1024];int len;while((len=in.read(buf1))>0){out.write(buf1,0,len);}in.close();out.close();}zip.close();System.out.println("解压完毕**");}
复制代码

判断解压缩路径是否存在

private static void isChartPathExist(String dirPath) {  File file = new File(dirPath);  if (!file.exists()) {    file.mkdirs();  }}
复制代码


清理本地旧文件

/**	 * 清理旧本地文件	 * @param date	 * @param 	 * @return	 */	public static boolean clearOldFile(String date, String downloadFilePath, String unZipDownloadFilePath ){			File localPath = new File(unZipDownloadFilePath);			File zipLocalPath = new File(downloadFilePath);
File[] children = localPath.listFiles(); if (children == null) { logger.error("Children is null collections."); return false; } for (File child : children) { if(child.isFile() && child.getName()!= null && child.getName().contains(date)){ child.delete(); } }
File[] zipChildren = zipLocalPath.listFiles(); if (zipChildren == null) { logger.error("Children is null collections."); return false; } for (File child : zipChildren) { if(child.isFile() && child.getName()!= null && child.getName().contains(date)){ child.delete(); } }
return true; }
复制代码


发布于: 3 小时前阅读数: 3
用户头像

拾贝

关注

还未添加个人签名 2019.05.10 加入

还未添加个人简介

评论

发布
暂无评论
zip解压缩