程序實現了ZIP壓縮。共分為2部分 : 壓縮(compression)與解壓(decompression)
大致功能包括用了多態,遞歸等JAVA核心技術,可以對單個文件和任意級聯文件夾進行壓縮和解壓。 需在代碼中自定義源輸入路徑和目標輸出路徑。
- package com.han;
- import java.io.*;
- import java.util.zip.*;
-
- /**
- * 程序實現了ZIP壓縮。共分為2部分 :
- * 壓縮(compression)與解壓(decompression)
- * <p>
- * 大致功能包括用了多態,遞歸等JAVA核心技術,可以對單個文件和任意級聯文件夾進行壓縮和解壓。
- * 需在代碼中自定義源輸入路徑和目標輸出路徑。
- * <p>
- * 在本段代碼中,實現的是壓縮部分;解壓部分見本包中decompression部分。
- * @author HAN
- *
- */
- public class CopyOfMyZipCompressing {
- private int k=1; //定義遞歸次數變量
- public CopyOfMyZipCompressing() {
- // TODO Auto-generated constructor stub
- }
-
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- long startTime=System.currentTimeMillis();
- CopyOfMyZipCompressing book=new CopyOfMyZipCompressing();
- try {
- book.zip("C:\\Users\\HAN\\Desktop\\stock\\SpectreCompressed.zip", //自定義的zip輸出路徑
- new File("C:\\Users\\HAN\\Desktop\\CombinedSpectres.txt")); //自定義的源輸入路徑,即要壓縮的文件或文件夾
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- long endTime=System.currentTimeMillis();
- System.out.println("耗費時間: "+(endTime-startTime)+" ms");
- }
-
- private void zip(String zipFileName, File inputFile) throws Exception{
- System.out.println("壓縮中...");
- ZipOutputStream out=new ZipOutputStream(new FileOutputStream(zipFileName));
- BufferedOutputStream bo=new BufferedOutputStream(out);
- zip(out,inputFile, "/"+inputFile.getName(),bo);
- bo.close();
- out.close(); //輸出流關閉
- System.out.println("壓縮完成");
- }
- private void zip(ZipOutputStream out, File f, String base, BufferedOutputStream bo)
- throws Exception{ //方法重載
- if (f.isDirectory()){
- File[] fl=f.listFiles();
- for(int i=0;i<fl.length;i++){
- zip(out, fl[i],base+"/"+fl[i].getName(),bo); //遞歸遍歷子文件夾
- }
- System.out.println("第"+k+"次遞歸");
- k++;
- }else{
- out.putNextEntry(new ZipEntry(base)); // 創建zip壓縮進入點base
- System.out.println(base);
- FileInputStream in=new FileInputStream(f);
- BufferedInputStream bi=new BufferedInputStream(in);
- int b;
- while((b=bi.read())!=-1){
- bo.write(b); //將字節流寫入當前zip目錄
- }
- bi.close();
- in.close(); //輸入流關閉
- }
- }
- }
- package com.han;
-
- import java.io.*;
- import java.util.zip.*;
- /**
- * 程序實現了ZIP壓縮。共分為2部分 :
- * 壓縮(compression)與解壓(decompression)
- * <p>
- * 大致功能包括用了多態,遞歸等JAVA核心技術,可以對單個文件和任意級聯文件夾進行壓縮和解壓。
- * 需在代碼中自定義源輸入路徑和目標輸出路徑。
- * <p>
- * 在本段代碼中,實現的是解壓部分;壓縮部分見本包中compression部分。
- * @author HAN
- *
- */
- public class CopyOfMyzipDecompressing {
-
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- long startTime=System.currentTimeMillis();
- try {
- ZipInputStream Zin=new ZipInputStream(new FileInputStream(
- "C:\\Users\\HAN\\Desktop\\stock\\SpectreCompressed.zip"));//輸入源zip路徑
- BufferedInputStream Bin=new BufferedInputStream(Zin);
- String Parent="C:\\Users\\HAN\\Desktop"; //輸出路徑(文件夾目錄)
- File Fout=null;
- ZipEntry entry;
- try {
- while((entry = Zin.getNextEntry())!=null && !entry.isDirectory()){
- Fout=new File(Parent,entry.getName());
- if(!Fout.exists()){
- (new File(Fout.getParent())).mkdirs();
- }
- FileOutputStream out=new FileOutputStream(Fout);
- BufferedOutputStream Bout=new BufferedOutputStream(out);
- int b;
- while((b=Bin.read())!=-1){
- Bout.write(b);
- }
- Bout.close();
- out.close();
- System.out.println(Fout+"解壓成功");
- }
- Bin.close();
- Zin.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- long endTime=System.currentTimeMillis();
- System.out.println("耗費時間: "+(endTime-startTime)+" ms");
- }
-
- }