練習題目一: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