Java API 压缩与解压缩之一

首先我们实现最简单的解压缩zip文件,该zip文件中不包含文件夹,也不含中文名。

/**
 * <pre>
 * 参考:
 * 	http://www.ibm.com/developerworks/cn/java/l-compress/index.html
 * </pre>
 */
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class UnZip {
	/** 定义一个2K的缓冲区 */
	static final int BUFFER = 2048;

	public static void main(String[] args) {
		String fileName = "c:/testlog.zip";
		// String unZipDir = "c:/abcd/abcd/abcd/abcd/abcd/";
		String unZipDir = "c:/1/2/";
		unZip(fileName, unZipDir);
		// System.out.println(makeDir(unZipDir));
	}

	/**
	 * @param fileName
	 *            String 待解压缩的文件名
	 * @param unZipDir
	 *            String 存放解压缩后生成的文件的文件夹
	 */
	public static void unZip(String fileName, String unZipDir) {
		try {

			// 先判断目标文件夹是否存在,如果不存在则新建,如果父目录不存在也新建
			File f = new File(unZipDir);
			if (!f.exists()) {
				f.mkdirs();
			}

			BufferedOutputStream dest = null;

			// 将用文件输入流读入ZIP文件
			FileInputStream fis = new FileInputStream(fileName);
			// 类ZipInputStream读取ZIP文件
			ZipInputStream zis = new ZipInputStream(
					new BufferedInputStream(fis));
			ZipEntry entry;
			String newFileName = "";
			// ZIP输入流打开后,你可以使用getNextEntry方法来读取ZIP文件中的条目数,
			// 该方法返回一个ZipEntry对象。如果到达文件的尾部,getNextEntry返回null
			while ((entry = zis.getNextEntry()) != null) {
				System.out.println("Extracting: " + entry);
				int count;
				byte data[] = new byte[BUFFER];
				// write the files to the disk
				newFileName = unZipDir + "/" + entry.getName();
				System.out.println("newFileName: " + newFileName);
				FileOutputStream fos = new FileOutputStream(newFileName);
				dest = new BufferedOutputStream(fos, BUFFER);
				while ((count = zis.read(data, 0, BUFFER)) != -1) {
					dest.write(data, 0, count);
				}
				dest.flush();
				dest.close();
			}
			zis.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static boolean makeDir(String unZipDir) {
		boolean b = false;
		try {
			File f = new File(unZipDir);
			if (!f.exists()) {
				b = f.mkdirs();
			}
		} catch (Exception e) {
			e.printStackTrace();
			return b;
		}
		return b;
	}
}
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值