使用java提供的api对文件进行压缩解密

练习题目一:zip、rar等格式的压缩文件经常需要我们解压,其中JDK提供了原生的API实现了其功能。

题目要求:已知:电脑某盘中有一个test.zip的压缩包,压缩包中有a.txt和b.txt两个文本文件。请用API解压该压缩包,并将a.txt和b.txt文本文件中的内容输出到控制台。

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

/**使用Java原生态 解压方式,解压 zip 和 rar 文件。
 * 压缩文件夹里面保存着  2个文本文件, 提取出他们的文件信息并打印出来。
 * 
 * 我实现的原理是:
 * ①首先使用 ZipInputStream 读取一个 zip文件。
 * ②遍历出他里面的文件信息(他的名字)
 * ③拿到他的名字以后。使用 ZipInputStream 读取 他的信息,并使用 OutputStream 将里面的文件 提取出来。
 * ④然后在通过 拿到的 文件 名字。通过一个方法传入名字,将他打印出来(用读取流读取,和输出流打印在屏幕)
 * 
 * */
public class Test021
{
	public static void main(String[] args) throws Exception
	{
		ZipInputStream zipIs = new ZipInputStream(new BufferedInputStream(new FileInputStream("d:/a.zip")));	//获取zip的流对象。
		
		ZipEntry zipEntry;
		while((zipEntry=zipIs.getNextEntry()) != null)		//进行遍历里面的条目。
		{
			String fileName =  zipEntry.getName(); //返回一个文件名称
		//	System.out.println(zipEntry.clone());
			
			int flag ;
			byte[] data = new byte[1024];
			BufferedOutputStream bufw = new BufferedOutputStream(new FileOutputStream(fileName));	//在使用一个字节输出流将压缩文件输出
			while( (flag = zipIs.read(data))!=-1)
			{
				bufw.write(data, 0, flag);
				bufw.flush();
			}
			
			
			println(new File(fileName));	//通过一个方法。传入名字 将他读取出来。并打印在控制台上面

		}
		
		zipIs.close();
	}
	
	
	/**既然是文本文件,就使用 Reader,和 Writer 即可
	 * */
	public static void println(File path) throws Exception
	{
		BufferedReader bufr = new BufferedReader(new FileReader(path));
		PrintWriter pr = new PrintWriter(new OutputStreamWriter(System.out),true);
		System.out.print(path.getName() + ",文件中的类容是:");
		String flag;
		while((flag=bufr.readLine())!=null)
		{
			pr.println(flag);
		}
		
		bufr.close();
	}

}


更多的还可以参考这个:
http://www.51cto.com/specbook/24/6910.htm

猜你喜欢

转载自blog.csdn.net/masai158/article/details/38664655