用java中的java.util.zip包读取压缩文件

最近下载了点数据,压缩包的形式下几十兆,一解压就1G左右了,如果一个个解压再看内容实在是伤不起,于是想有没有不解压而读取压缩文件内容的方式,查阅网上资料,发现java中的java.util.zip包中提供了处理zip文件的API,小练习了一下,代码如下:

import java.io.BufferedReader;
import java.io.File;
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;

/**
 * 
 * @author Qingxia Liu
 *
 */
public class ZipTest {
	/**
	 * 为文件类型分类,以适当形式调用读取函数
	 * 调用格式,如ZipTest.display("F:\\DBpedia\\tst\\my.zip");
	 * @param filename 压缩文件的文件名
	 */
	public static void display(String filename){
		File file = new File(filename);
		if(file.isDirectory()){
			File[] list = file.listFiles();
			for(int i=0; i<list.length; i++){
				ZipTest.display(list[i]);
			}
		}else{
			ZipTest.display(file);
		}
	}
	/**
	 * 依次读取压缩包中各文件内容
	 * @param file
	 */
	public static void display(File file){
		String entryname = "abc";
		try {
//			System.out.println(file.toString());
			ZipFile zip = new ZipFile(file);//由指定的File对象打开供阅读的ZIP文件
			Enumeration<ZipEntry> entries = (Enumeration<ZipEntry>) zip.entries();//获取zip文件中的各条目(子文件)
//			ZipInputStream zis = new ZipInputStream(zip.getInputStream(zip.entries().nextElement()));
			while(entries.hasMoreElements()){//依次访问各条目
				ZipEntry ze = (ZipEntry) entries.nextElement();
				BufferedReader br = new BufferedReader(new InputStreamReader(zip.getInputStream(ze)));
				System.out.println("\n"+ze.getName()+":");
				String line ;
				while((line = br.readLine()) != null){
					System.out.println(line);
				}
				br.close();
			}
			
		} catch (ZipException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**
	 * 读取压缩包file中,指定文件名entryname的文件的内容
	 * @param file
	 * @param entryname
	 */
	public static void display(File file, String entryname){
		try {
//			System.out.println(file.toString());
			ZipFile zip = new ZipFile(file);
//			ZipInputStream zis = new ZipInputStream(zip.getInputStream(zip.entries().nextElement()));
			ZipEntry ze = zip.getEntry(entryname);//根据文件名取得压缩包中的对应条目
			System.out.println(ze.getName()+":");
			BufferedReader br = new BufferedReader(new InputStreamReader(zip.getInputStream(ze)));
			String line ;
			while((line = br.readLine()) != null){
				System.out.println(line);
			}
			br.close();
		} catch (ZipException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public static void main(String[] args){
		String filename = "F:\\DBpedia\\tst\\my.zip";
		ZipTest.display(filename);
	}
}



通过这样的方式,可以不用将文件解压出来就从控制台看到文件的内容。其中主要是使用了ZipFile、ZipEntry这两个类,其他过程和一般文件的读取差不多,本来看到API中有个ZipInputStream想用用的,没用成暂时也不想折腾,如果有用过的欢迎交流。
另外,我下载的压缩文件是bz2格式的,但我上面所写的这个程序貌似能读取zip和rar格式的,不能读取.bz2格式的文件(否则就会在实例化ZipFile的那行报错,“java.util.zip.ZipException: error in opening zip file”,网上找了下也没有好的方法,只好继续悲催地解压了再看了,不知道谁有没有读取bz2格式文件的好方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值