java io操作----压缩文件

在java.util.zip包中,定义了多种类型用于创建和读取zip压缩格式的文件,主要有ZipEntry,ZipInputStream,ZipOutputStream三个类。

java包中还有一个ZipFile类,利用它可以从压缩格式文件中读取原始文件的入口,即在解压缩zip文件时会用到
package zip;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;

//zip是windows平台下常用的压缩文件,gzip是unix平台下常用的
public class ZipSample {

	private final int BUFFER_SIZE = 1024;

	public static void main(String[] args) {

		File zip = new File("c:\\test.zip");
		File[] files = new File[3];
		files[0] = new File("D:\\holen.xml");
		files[1] = new File("D:\\holen2.xml");
		files[2] = new File("D:\\downloads\\XPath.chm");
		ZipSample sample = new ZipSample();
		sample.zip(zip, files); // 将files打包至zip文件

		File zipFile = new File("c:\\test.zip");
		sample.readZipFile(zipFile); // 读取zip文件

	}

	public void zip(File zipFile, File[] zippedFiles) { // 将zippedFiles打包到zipFile的zip文件即压缩文件
		try {
			byte[] buffer = new byte[BUFFER_SIZE];
			FileOutputStream fs = new FileOutputStream(zipFile);
			ZipOutputStream zo = new ZipOutputStream(fs);

			for (int i = 0; i < zippedFiles.length; i++) {
				if (zippedFiles[i] == null || !zippedFiles[i].exists()
						|| zippedFiles[i].isDirectory())
					continue;
				// 添加每个原始文件的入口
				ZipEntry zipAdd = new ZipEntry(zippedFiles[i].getName());// zipEntry标示压缩文件中每一个原始文件的入口,具有唯一的名称
				zipAdd.setTime(zippedFiles[i].lastModified());
				zo.putNextEntry(zipAdd);

				FileInputStream in = new FileInputStream(zippedFiles[i]);
				while (true) {
					int nRead = in.read(buffer, 0, buffer.length); // 读取的字节数
					if (nRead <= 0) {
						break;
					}
					zo.write(buffer, 0, nRead);

				}
				in.close();
			}
			zo.close();
			fs.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void readZipFile(File file) { // 解压缩,用ZipFile类
		try {
			// 获取压缩文件中每一个原始文件的入口
			ZipFile zf = new ZipFile(file);
			Enumeration entries = zf.entries();
			// 从控制台获取用户输入
			BufferedReader input = new BufferedReader(new InputStreamReader(
					System.in));
			while (entries.hasMoreElements()) {
				ZipEntry ze = (ZipEntry) entries.nextElement();
				System.out.println("Read " + ze.getName() + "?");
				String inputLine = input.readLine();
				if (inputLine.equalsIgnoreCase("y")) {
					long size = ze.getSize();
					if (size > 0) {
						// 解压输出指定的原始文件
						BufferedReader br = new BufferedReader(
								new InputStreamReader(zf.getInputStream(ze)));
						String line;
						while ((line = br.readLine()) != null) {
							System.out.println(line);
						}
						br.close();
					}
				} // if "y"
			}// while
		} catch (ZipException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}


该程序执行后会在c盘下生产出一个test.zip文件

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