Java压缩文件工具类ZipUtil使用方法代码示例

发布时间:2019-10-09 发布网站:脚本之家
脚本之家收集整理的这篇文章主要介绍了Java压缩文件工具类ZipUtil使用方法代码示例脚本之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

本文实例通过Java的Zip输入输出流实现压缩和解压文件,前一部分代码实现获取文件路径,压缩文件名的更改等,具体如下:

package com.utility.zip;
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.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import com.utility.io.IOUtil;
/**
 * 通过Java的Zip输入输出流实现压缩和解压文件
 * 
 * @author liujiduo
 * 
 */
public final class ZipUtil {
	private ZipUtil() {
		// empty
	}
	/**
   * 压缩文件
   * 
   * @param filePath
   *      待压缩的文件路径
   * @return 压缩后的文件
   */
	public static File zip(String filePath) {
		File target = null;
		File source = new File(filePath);
		if (source.exists()) {
			// 压缩文件名=源文件名.zip
			String zipName = source.getName() + ".zip";
			target = new File(source.getParent(),zipName);
			if (target.exists()) {
				target.delete();
				// 删除旧的文件
			}
			FileOutputStream fos = null;
			ZipOutputStream zos = null;
			try {
				fos = new FileOutputStream(target);
				zos = new ZipOutputStream(new BufferedOutputStream(fos));
				// 添加对应的文件Entry
				addEntry("/",source,zos);
			}
			catch (IOException e) {
				throw new RuntimeException(e);
			}
			finally {
				IOUtil.closeQuietly(zos,fos);
			}
		}
		return target;
	}
	/**
   * 扫描添加文件Entry
   * 
   * @param base
   *      基路径
   * 
   * @param source
   *      源文件
   * @param zos
   *      Zip文件输出流
   * @throws IOException
   */
	private static void addEntry(String base,File source,ZipOutputStream zos)
	      throws IOException {
		// 按目录分级,形如:/aaa/bbb.txt
		String entry = base + source.getName();
		if (source.isDirectory()) {
			for (File file : source.listFiles()) {
				// 递归列出目录下的所有文件,添加文件Entry
				addEntry(entry + "/",file,zos);
			}
		} else {
			FileInputStream fis = null;
			BufferedInputStream bis = null;
			try {
				byte[] buffer = new byte[1024 * 10];
				fis = new FileInputStream(source);
				bis = new BufferedInputStream(fis,buffer.length);
				int read = 0;
				zos.putNextEntry(new ZipEntry(entry));
				while ((read = bis.read(buffer,buffer.length)) != -1) {
					zos.write(buffer,read);
				}
				zos.closeEntry();
			}
			finally {
				IOUtil.closeQuietly(bis,fis);
			}
		}
	}
	/**
   * 解压文件
   * 
   * @param filePath
   *      压缩文件路径
   */
	public static void unzip(String filePath) {
		File source = new File(filePath);
		if (source.exists()) {
			ZipInputStream zis = null;
			BufferedOutputStream bos = null;
			try {
				zis = new ZipInputStream(new FileInputStream(source));
				ZipEntry entry = null;
				while ((entry = zis.getNextEntry()) != null
				            && !entry.isDirectory()) {
					File target = new File(source.getParent(),entry.getName());
					if (!target.getParentFile().exists()) {
						// 创建文件父目录
						target.getParentFile().mkdirs();
					}
					// 写入文件
					bos = new BufferedOutputStream(new FileOutputStream(target));
					int read = 0;
					byte[] buffer = new byte[1024 * 10];
					while ((read = zis.read(buffer,buffer.length)) != -1) {
						bos.write(buffer,read);
					}
					bos.flush();
				}
				zis.closeEntry();
			}
			catch (IOException e) {
				throw new RuntimeException(e);
			}
			finally {
				IOUtil.closeQuietly(zis,bos);
			}
		}
	}
	public static void main(String[] args) {
		String targetPath = "E:\\Win7壁纸";
		File file = ZipUtil.zip(targetPath);
		System.out.println(file);
		ZipUtil.unzip("F:\\Win7壁纸.zip");
	}
}

下面是通过IO流工具类实现关闭一个或多个流对象的Java语言描述,获取可关闭的流对象列表,具体如下:

package com.utility.io;
import java.io.Closeable;
import java.io.IOException;
/**
 * IO流工具类
 * 
 * @author liujiduo
 * 
 */
public class IOUtil {
	/**
   * 关闭一个或多个流对象
   * 
   * @param closeables
   *      可关闭的流对象列表
   * @throws IOException
   */
	public static void close(Closeable... closeables) throws IOException {
		if (closeables != null) {
			for (Closeable closeable : closeables) {
				if (closeable != null) {
					closeable.close();
				}
			}
		}
	}
	/**
   * 关闭一个或多个流对象
   * 
   * @param closeables
   *      可关闭的流对象列表
   */
	public static void closeQuietly(Closeable... closeables) {
		try {
			close(closeables);
		}
		catch (IOException e) {
			// do nothing
		}
	}
}

总结

以上就是本文关于Java压缩文件工具类ZipUtil使用方法代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。

总结

以上是脚本之家为你收集整理的Java压缩文件工具类ZipUtil使用方法代码示例全部内容,希望文章能够帮你解决Java压缩文件工具类ZipUtil使用方法代码示例所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:76874919,请注明来意。

快乐,其实很简单!比如有我~

关注我升职加薪

标签: