Java壓縮(文件或目錄)

這幾天學習Java IO,老師讓做一個Java Zip壓縮程序,參考了網上的一些很不錯的代碼,結合自己的需要,寫了下面這段代碼:

/**
 *
 */
package zxcTest;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
 * @author Xiaocaho Zhao
 *
 */
public class Compressfile {

 /**
  * @param args
  * @throws IOException
  */
 public static void main(String[] args) throws IOException {
  // TODO Auto-generated method stub
  //需要壓縮的文件或目錄的路徑
  File file = new File("C:/Users/Administrator/Desktop/java_zip");
  if(file.canRead())
  {
   //FileOutputStream的文件路徑必須帶後綴,不然會出現“文件無法訪問的異常”
   ZipOutputStream out = new ZipOutputStream(
    new FileOutputStream(file.getPath() + ".zip"));
   //找到最後一個‘/’的位置,以便取出當前的文件名或目錄名
   Zip(file.getPath(),file.getPath().lastIndexOf("//"),out);
   out.closeEntry();
   out.close();

  }else{
   System.out.println("file can not read.");
  }
 }
 
 public static void Zip(String path,int baseindex,ZipOutputStream out) throws IOException{
  //要壓縮的目錄或文件
  File file = new File(path);
  File[] files;
  if(file.isDirectory()){//若是目錄,則列出所有的子目錄和文件
   files = file.listFiles();
  }else{//若爲文件,則files數組只含有一個文件
   files = new File[1];
   files[0] = file;
  }
  
  for(File f:files){
   if(f.isDirectory()){
    //去掉壓縮根目錄以上的路徑串,一面ZIP文件中含有壓縮根目錄父目錄的層次結構
    String pathname = f.getPath().substring(baseindex+1);
    //空目錄也要新建喲個項
    out.putNextEntry(new ZipEntry(pathname + "/"));
    //遞歸
    Zip(f.getPath(),baseindex,out);
   }else{
    //去掉壓縮根目錄以上的路徑串,一面ZIP文件中含有壓縮根目錄父目錄的層次結構
    String pathname = f.getPath().substring(baseindex+1);
    //新建項爲一個文件
    out.putNextEntry(new ZipEntry(pathname));
    //讀文件
    BufferedInputStream in = new BufferedInputStream(
      new FileInputStream(f));
    int c;
    while((c=in.read()) != -1)
     out.write(c);
    in.close();
   }
  }
 }
}


發佈了30 篇原創文章 · 獲贊 31 · 訪問量 35萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章