博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java解压缩文件简单实例
阅读量:5739 次
发布时间:2019-06-18

本文共 5474 字,大约阅读时间需要 18 分钟。

hot3.png

package com.cwqi.demo;/** *@author Cwqi *2015-8-26上午9:59:12 */import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.Enumeration;import org.apache.tools.ant.Project;import org.apache.tools.ant.taskdefs.Zip;import org.apache.tools.ant.types.FileSet;import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipFile;import org.apache.tools.zip.ZipOutputStream;public class ZipDemo {	/**	 * 解压	 * @param zipFilePath:压缩文件路径	 */	public static void unzip(String zipFilePath) {		unzipFile(zipFilePath, null);	}	public static File buildFile(String fileName, boolean isDirectory) {		File target = new File(fileName);		if (isDirectory) {			target.mkdirs();		} else {			if (!target.getParentFile().exists()) {				target.getParentFile().mkdirs();			}		}		return target;	}	/**	 * 解压	 * @param zipFilePath zip文件路径	 * @param targetPath  解压缩到的位置,如果为null或空字符串则默认解压缩到跟zip包同目录跟zip包同名的文件夹下	 */	public static void unzipFile(String zipFilePath, String targetPath) {		OutputStream os = null;		InputStream is = null;		ZipFile zipFile = null;		try {			zipFile = new ZipFile(zipFilePath);			String directoryPath = "";			if (null == targetPath || "".equals(targetPath)) {				directoryPath = zipFilePath.substring(0,						zipFilePath.lastIndexOf("."));			} else {				directoryPath = targetPath;			}			@SuppressWarnings("unchecked")			Enumeration
 entryEnum = zipFile.getEntries(); if (null != entryEnum) { ZipEntry zipEntry = null; while (entryEnum.hasMoreElements()) { zipEntry = entryEnum.nextElement(); if (zipEntry.isDirectory()) { new File(directoryPath + File.separator + zipEntry.getName()).mkdirs(); continue; } if (zipEntry.getSize() > 0) { // 文件 File targetFile = ZipDemo.buildFile(directoryPath + File.separator + zipEntry.getName(), false); os = new BufferedOutputStream(new FileOutputStream( targetFile)); is = zipFile.getInputStream(zipEntry); byte[] buffer = new byte[4096]; int readLen = 0; while ((readLen = is.read(buffer, 0, 4096)) >= 0) { os.write(buffer, 0, readLen); } os.flush(); os.close(); } else { // 空目录 ZipDemo.buildFile(directoryPath + File.separator + zipEntry.getName(), true); } } } } catch (IOException ex) { ex.printStackTrace(); } finally { if (null != zipFile) { zipFile = null; } if (null != is) { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } if (null != os) { try { os.close(); } catch (IOException e) { e.printStackTrace(); } } } } static final int BUFFER = 2048; /**  * 压缩  * @param sourceFile 为要压缩的文件或文件目录  * @param targetFile 为要生成zip文件的路径和文件名,如:"D:\\downloads.zip"  */ public static void zipFiles(String sourceDir, String targetFile) { File sourceFile = new File(sourceDir); File zFile = new File(targetFile); ZipOutputStream zos = null; try { OutputStream os; os = new FileOutputStream(zFile); BufferedOutputStream bos = new BufferedOutputStream(os); zos = new ZipOutputStream(bos); String basePath = null; if (sourceFile.isDirectory()) { basePath = sourceFile.getPath(); } else { basePath = sourceFile.getParent(); } zipFile(sourceFile, basePath, zos); } catch (IOException e) { e.printStackTrace(); } finally { if (zos != null) { try { zos.close(); } catch (IOException e) { e.printStackTrace(); } } } } private static void zipFile(File sourceFile, String basePath, ZipOutputStream zos) throws IOException { File[] files = null; if (sourceFile.isDirectory()) { files = sourceFile.listFiles(); } else { files = new File[] { sourceFile }; } InputStream is = null; BufferedInputStream bis = null; String pathName; byte[] buf = new byte[BUFFER]; int length = 0; try { for (File file : files) { if (file.isDirectory()) { pathName = file.getPath().substring(basePath.length() + 1) + "/"; zos.putNextEntry(new ZipEntry(pathName)); zipFile(file, basePath, zos); } else { pathName = file.getPath().substring(basePath.length() + 1); is = new FileInputStream(file); bis = new BufferedInputStream(is); zos.putNextEntry(new ZipEntry(pathName)); while ((length = bis.read(buf)) != -1) { zos.write(buf, 0, length); } } } } finally { if (bis != null) { bis.close(); } if (is != null) { is.close(); } } } /**  * 使用ant压缩  * @param srcPathName  * @param destPathName  */  public static void zipByAnt(String srcPathName,String destPathName) { File srcdir = new File(srcPathName); if (!srcdir.exists()){ throw new RuntimeException(srcPathName + "no exist!"); } Project project = new Project(); Zip zip = new Zip(); zip.setProject(project); File zipFile = new File(destPathName); zip.setDestFile(zipFile); FileSet fileSet = new FileSet(); fileSet.setProject(project); fileSet.setDir(srcdir); // fileSet.setIncludes("**/*.java"); // fileSet.setExcludes(*.txt);  zip.addFileset(fileSet); zip.execute(); } /**  * 测试  * @param args  */ public static void main(String[] args) { unzipFile("D:\\Downloads.zip", "D:\\Downloads"); //zipFiles("D:\\Downloads", "D:\\Downloads.zip"); //zipByAnt("D:\\Downloads", "D:\\Downloads.zip"); }}

转载于:https://my.oschina.net/u/1861837/blog/497284

你可能感兴趣的文章
自动化运维与网站安全技术沙龙活动分享
查看>>
第6章核心代码《跟老男孩学习Linux运维:Shell编程实战》
查看>>
思科和华为路由器OSPF之对比学习
查看>>
python运维开发之socket网络编程04
查看>>
6426C Lab2 部署和配置证书服务
查看>>
以"小刀会“的成败论当今创业成败
查看>>
SCOM 2012系列③导入管理包
查看>>
读《做单--成交的秘密》有感
查看>>
shell脚本如何监控程序占用带宽?
查看>>
如何定位cpu占用率高的java线程?
查看>>
http://www.casualarena.com/
查看>>
redis 性能监控和排查
查看>>
Android 开发之Matrix图片处理类的使用
查看>>
MySQL写入插入数据优化配置
查看>>
vim目录说明
查看>>
说说css3布局
查看>>
输入 URL 到页面完成加载过程中的所有发生的事情?
查看>>
BZOJ 1004 HNOI2008 Cards Burnside引理
查看>>
android获取mp4视频文件总时长和视频宽高<转>
查看>>
ASP.NET 短路由配置
查看>>