欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JAVA压缩文件

程序员文章站 2022-03-03 09:06:11
...
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
 * @author zhaoliangyuan
 * @E-mail [email protected]
 * @dateTime 2010/7/20 上午 10:44:50 类说明:
 * 壓縮文件
 */
public class Test24 {
	public static void main(String[] args) {

		Test24 recursiveZip = new Test24();
		System.out.println("====開始====");
		try {
			OutputStream os = new FileOutputStream("D:/test.rar");
			BufferedOutputStream bs = new BufferedOutputStream(os);
			ZipOutputStream zo = new ZipOutputStream(bs);

			// recursiveZip.zip("e:/recursive-zip/中文文件名.txt", new
			// File("e:/recursive-zip"), zo, true, true);
			recursiveZip.zip("D:/temp", new File("D:/temp"), zo, true, true);

			zo.closeEntry();
			zo.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println("====完成====");
	}

	/**
	 * @param path
	 *            要压缩的路径, 可以是目录, 也可以是文件.
	 * @param basePath
	 *            如果path是目录,它一般为new File(path), 作用是:使输出的zip文件以此目录为根目录,
	 *            如果为null它只压缩文件, 不解压目录.
	 * @param zo
	 *            压缩输出流
	 * @param isRecursive
	 *            是否递归
	 * @param isOutBlankDir
	 *            是否输出空目录, 要使输出空目录为true,同时baseFile不为null.
	 * @throws IOException
	 */
	public void zip(String path, File basePath, ZipOutputStream zo, boolean isRecursive, boolean isOutBlankDir) throws IOException {

		File inFile = new File(path);

		File[] files = new File[0];
		if (inFile.isDirectory()) { // 是目录
			files = inFile.listFiles();
		} else if (inFile.isFile()) { // 是文件
			files = new File[1];
			files[0] = inFile;
		}
		byte[] buf = new byte[1024];
		int len;
		// System.out.println("baseFile: "+baseFile.getPath());
		for (int i = 0; i < files.length; i++) {
			String pathName = "";
			if (basePath != null) {
				if (basePath.isDirectory()) {
					pathName = files[i].getPath().substring(basePath.getPath().length() + 1);
				} else {// 文件
					pathName = files[i].getPath().substring(basePath.getParent().length() + 1);
				}
			} else {
				pathName = files[i].getName();
			}
			System.out.println(pathName);
			if (files[i].isDirectory()) {
				if (isOutBlankDir && basePath != null) {
					zo.putNextEntry(new ZipEntry(pathName + "/")); // 可以使空目录也放进去
				}
				if (isRecursive) { // 递归
					zip(files[i].getPath(), basePath, zo, isRecursive, isOutBlankDir);
				}
			} else {
				FileInputStream fin = new FileInputStream(files[i]);
				zo.putNextEntry(new ZipEntry(pathName));
				while ((len = fin.read(buf)) > 0) {
					zo.write(buf, 0, len);
				}
				fin.close();
			}
		}
	}

}
 
相关标签: Java OS