java压缩文件

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipFileTest {

	ZipOutputStream out = null;

	/**
	 * 创建zip输出流
	 * 
	 * @param zipFileName
	 *            压缩后的文件名
	 * */
	public ZipOutputStream buildZipOut(String zipFileName) throws Exception {
		out = new ZipOutputStream(new FileOutputStream(zipFileName));
		return out;
	}

	/**
	 * 关闭zip输出流 必须再压缩完之后关闭,否则后压缩的文件会覆盖前面压缩
	 * */
	public void closeZipOut() {
		if (out != null) {
			try {
				out.close();
			} catch (IOException e) {
				System.out.println(e.toString());
			}
		}
	}

	/**
	 * 压缩文件,可以由zipFileOrDirector代替
	 * 
	 * @param file
	 *            传入的文件
	 * */
	public void zipFile(File file) throws Exception {
		FileInputStream in = new FileInputStream(file);

		// 创建zip文件条目,相当于产生一个空文件
		// 压缩后不带路径

		ZipEntry entry = new ZipEntry(file.getName());
		// 压缩后带路径,因为传入的文件名中带路径,以至于zip文件条目中也带了目录
		// ZipEntry entry = new ZipEntry(this.fileName);
		// 开始写入新的 ZIP 文件条目并将流定位到条目数据的开始处
		out.putNextEntry(entry);

		// 读取文件,并写入到压缩文件
		byte[] buffer = new byte[1024];
		int i = -1;
		while ((i = in.read(buffer)) != -1) {
			out.write(buffer, 0, i);
		}
		// 关闭当前 ZIP 条目并定位流以写入下一个条目
		out.closeEntry();
		in.close();
		// out.close();
		System.out.println("压缩完成");
	}

	/**
	 * 压缩文件目录
	 * 
	 * @param fileName
	 *            传入的文件名
	 * */
	public void zipFileOrDirector(String fileDirector) throws Exception {
		File file = new File(fileDirector);
		ArrayList<File> files = checkFile(file, new ArrayList<File>());
		for (File file2 : files) {
			zipFile(file2);
		}
		out.close();
	}

	// 检查文件类别,返回文件列表
	public ArrayList<File> checkFile(File file, ArrayList<File> list) {
		if (file.isDirectory()) {
			File[] files = file.listFiles();
			for (File file2 : files) {
				// 递归检查,直到文件不为目录
				checkFile(file2, list);
			}
		} else {
			list.add(file);
		}
		return list;
	}

	public static void main(String[] args) {
		String fileName = "e:/temp/hello";
		// System.out.println(new File(fileName).getPath());
		ZipFileTest test = new ZipFileTest();
		System.out.println("e:/" + new File(fileName).getName() + ".zip");
		try {
			// test.zipFile(fileName,"e:/"+new File(fileName).getName()+".zip");
			// test.zipFileDirector(fileName,"e:/"+new
			// File(fileName).getName()+".zip");
			String zipFileName = "e:/222222.zip";
			test.buildZipOut(zipFileName);
			test.zipFileOrDirector(fileName);
			test.closeZipOut();
		} catch (Exception e) {
			System.out.println(e.toString());
		}
	}

}


 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值