生活随笔
收集整理的這篇文章主要介紹了
Java 文件压缩与解压缩
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Java IO類庫中有提供可以壓縮與解壓縮的類,其中使用最為廣泛的是Zip和GZip,使用這兩個類可以很方便的壓縮數據。
1、使用Gzip進行簡單的文件壓縮
GZIP接口相對比較簡單,如果只要對單個文件進行壓縮,那么使用GZIP可能是最好的選擇。
import java.io.*;
import java.util.zip.*;
/*** 使用GZIP進行簡單的壓縮,解壓縮**/
public class GZIPcompress {public static void main(String[] args)
throws IOException {
if(args.length==
0){System.out.println(
"未輸入需要壓縮的文件名");System.exit(
1);}BufferedReader reader =
new BufferedReader(
new FileReader(args[
0]));BufferedOutputStream out =
new BufferedOutputStream(
new GZIPOutputStream(
new FileOutputStream(
"test.gz")));System.out.println(
"Writing file");
int c ;
while((c= reader.read())!=-
1){out.write(c);}reader.close();out.close();System.out.println(
"Reading file");BufferedReader reader2 =
new BufferedReader(
new InputStreamReader(
new GZIPInputStream(
new FileInputStream(
"test.gz"))));String s ;
while((s = reader2.readLine())!=
null){System.out.println(s);}reader2.close();}}
在這里新建一個文件a.txt,內容隨機。使用命令行可以看出文件已經被壓縮,同時在目錄下出現了一個test.zip的壓縮文件。
那么一個簡單的壓縮工具就完成了。
2、使用ZIp進行多文件壓縮保存
zip與Gzip最大的區別就是可以進行多文件的壓縮。
import java.io.BufferedInputStream
import java.io.BufferedOutputStream
import java.io.BufferedReader
import java.io.FileInputStream
import java.io.FileNotFoundException
import java.io.FileOutputStream
import java.io.FileReader
import java.io.IOException
import java.util.Enumeration
import java.util.zip.Adler32
import java.util.zip.CheckedInputStream
import java.util.zip.CheckedOutputStream
import java.util.zip.ZipEntry
import java.util.zip.ZipFile
import java.util.zip.ZipInputStream
import java.util.zip.ZipOutputStream
public class ZIPCompress {public static void main(String[] args) throws IOException {//BufferedOutputStream out = new BufferedOutputStream(new ZipOutputStream(new FileOutputStream("test2.zip")))FileOutputStream f = new FileOutputStream("test2.zip")// 使用Checksum來計算和檢驗文件CheckedOutputStream csum = new CheckedOutputStream(f, new Adler32())ZipOutputStream zos = new ZipOutputStream(csum)BufferedOutputStream out = new BufferedOutputStream(zos)zos.setComment("A test of Java Zipping")for (String arg : args) {System.out.println("Writing file "+arg)BufferedReader in = new BufferedReader(new FileReader(arg))// 每個需要加入壓縮文檔的都需要調用,通過ZipEntry 可以獲取文件的名稱、壓縮和未壓縮的文件大小,日期等一系列的信息zos.putNextEntry(new ZipEntry(arg))int cwhile((c = in.read())!=-1){out.write(c)}in.close()out.flush()}out.close()System.out.println("Checksum: "+csum.getChecksum().getValue())System.out.println("Reading file")FileInputStream fis = new FileInputStream("test2.zip")CheckedInputStream csumi = new CheckedInputStream(fis, new Adler32())ZipInputStream in2 = new ZipInputStream(csumi)BufferedInputStream bis = new BufferedInputStream(in2)ZipEntry zewhile((ze = in2.getNextEntry())!=null){System.out.println("Reading File "+ ze)int xwhile((x = bis.read())!= -1){System.out.println(x)}}if(args.length==1){System.out.println("Checksum: "+csumi.getChecksum().getValue())}bis.close()ZipFile zf = new ZipFile("test2.zip")Enumeration<? extends ZipEntry> e = zf.entries()while (e.hasMoreElements()) {ZipEntry ze2 = (ZipEntry) e.nextElement()System.out.println("File: "+ze2)}}}
再新建一個文件b.txt,將a.txt與b.txt壓縮到一個壓縮包中。
如上圖所示,使用ZIP壓縮文件,壓縮的文件可以很詳細的顯示被壓縮文件的文件名以及文件大小,一切都是ZipEntry的作用。
總結
以上是生活随笔為你收集整理的Java 文件压缩与解压缩的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。