java中Zip的压缩和解压

java提供的ZIP压缩方法

用到了三个类 ZipEntry ZipOutputStream ZipInputStream

代码如下

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

public class Zipyasuojiaya {
	public static void main(String args[]) {
		file2zip("C:\\abcdefg.zip");
		zip2file();
	}

	// 文件转zip文件,这里模拟一个文件夹和文件压缩
	public static void file2zip(String zipPath) {
		try {
			File zipFile = new File(zipPath);
			zipFile.getParentFile().mkdirs();
			ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
					zipPath));

			// 写一个文件
			File f = new File("C:\\1.txt");
			// 添加一个ZipEntry对象
			out.putNextEntry(new ZipEntry("copy1.txt"));
			FileInputStream in = new FileInputStream(f);
			int b;
			while ((b = in.read()) != -1) {
				out.write(b);
			}
			in.close();
			// 在压缩文件中创建一个文件夹
			out.putNextEntry(new ZipEntry("abc/"));
			// 向这个压缩中的文件夹写入一个文件
			File f1 = new File("C:\\1.txt");
			// 注意这里是文件在压缩文件中的位置,在解压的时候它的那么也是这个
			out.putNextEntry(new ZipEntry("abc/copy2.txt"));
			FileInputStream in1 = new FileInputStream(f1);
			int b1;
			while ((b1 = in1.read()) != -1) {
				out.write(b1);
			}
			in1.close();
			System.out.println("压缩完成");
			// 没有关闭的话文件会存在异常
			out.close();
		} catch (Exception e) {
		}
	}

	// 压缩文件转回文件形式
	public static void zip2file() {
		try {
			ZipInputStream in = new ZipInputStream(new FileInputStream(
					"C:\\abcdefg.zip"));
			ZipEntry z = null;
			while ((z = in.getNextEntry()) != null) {
				if (z.isDirectory()) {
					File f = new File("C:\\123\\" + z.getName() + "\\");
					// 这里将文件夹创建,压缩文件夹中的文件也会当做一个个ZipEntry类,文件夹也是一个ZipEntry类。
					f.mkdirs();
				} else {
					File f = new File("C:\\123\\" + z.getName());
					OutputStream out = new FileOutputStream(f);
					int b;
					while ((b = in.read()) != -1) {
						out.write(b);
					}
					out.close();
				}
			}
			// 记得关闭
			in.close();

		} catch (Exception e) {
			// 这里最好写点东西,要不出错也不知道
			e.printStackTrace();
		}
	}
}
 

你可能感兴趣的:(java,C++,c,C#,F#)