首页 > 开发 > Java > 正文

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

2024-07-13 10:13:33
字体:
来源:转载
供稿:网友

本文实例通过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, 0, buffer.length)) != -1) {					zos.write(buffer, 0, 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, 0, buffer.length)) != -1) {						bos.write(buffer, 0, 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教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表