java 將指定資料夾遞迴的進行zip打包壓縮
阿新 • • 發佈:2019-02-18
1.注意事項
功能:指定資料夾目錄,則會將該資料夾名稱為新的壓縮檔名稱,新的壓縮檔案會在指定檔案同級目錄下,然後將該資料夾下的子檔案和子資料夾都進行壓縮打包。
2.示例程式碼:
package tmp.MavenTest; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.List; import java.util.logging.Logger; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; //定時將指定資料夾下的所有檔案壓縮 public class ZipFilesUtil { public static void compress(File f, String baseDir, ZipOutputStream zos){ if(!f.exists()){ System.out.println("待壓縮的檔案目錄或檔案"+f.getName()+"不存在"); return; } File[] fs = f.listFiles(); BufferedInputStream bis = null; //ZipOutputStream zos = null; byte[] bufs = new byte[1024*10]; FileInputStream fis = null; try{ //zos = new ZipOutputStream(new FileOutputStream(zipFile)); for(int i=0; i<fs.length; i++){ String fName = fs[i].getName(); System.out.println("壓縮:" + baseDir+fName); if(fs[i].isFile()){ ZipEntry zipEntry = new ZipEntry(baseDir+fName);// zos.putNextEntry(zipEntry); //讀取待壓縮的檔案並寫進壓縮包裡 fis = new FileInputStream(fs[i]); bis = new BufferedInputStream(fis, 1024*10); int read = 0; while((read=bis.read(bufs, 0, 1024*10))!=-1){ zos.write(bufs, 0, read); } //如果需要刪除原始檔,則需要執行下面2句 //fis.close(); //fs[i].delete(); } else if(fs[i].isDirectory()){ compress(fs[i], baseDir+fName+"/", zos); } }//end for }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ //關閉流 try { if(null!=bis) bis.close(); //if(null!=zos) //zos.close(); if(null!=fis) fis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void main( String[] args ) throws ParseException { String sourceFilePath = "D:\\Eclipse_XJ\\work_space\\WebProbe\\downloadfiles"; File sourceDir = new File(sourceFilePath); File zipFile = new File(sourceFilePath+".zip"); ZipOutputStream zos = null; try { zos = new ZipOutputStream(new FileOutputStream(zipFile)); String baseDir = "downloadfiles/"; compress(sourceDir, baseDir, zos); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ if(zos!=null) try { zos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }