1. 程式人生 > >java寫的將檔案或資料夾打包成zip的工具類

java寫的將檔案或資料夾打包成zip的工具類

一、概要

由於筆者在開發中會涉及到對檔案和資料夾的打包操作,所有自己寫了一個工具類用於打包檔案

二、老規矩,直接上原始碼

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import
java.util.zip.ZipOutputStream; public final class FileToZip { private FileToZip(){} /** * 將存放在sourceFilePath目錄下的原始檔,打包成fileName名稱的zip檔案,並存放到zipFilePath路徑下 * @param sourceFilePath :待壓縮的檔案路徑 * @param zipFilePath :壓縮後存放路徑 * @param fileName :壓縮後文件的名稱 * @return
*/
public static boolean fileToZip(String sourceFilePath,String zipFilePath,String fileName){ boolean flag = false; File sourceFile = new File(sourceFilePath); FileInputStream fis = null; BufferedInputStream bis = null; FileOutputStream fos = null
; ZipOutputStream zos = null; if(sourceFile.exists() == false){ System.out.println("待壓縮的檔案目錄:"+sourceFilePath+"不存在."); sourceFile.mkdir(); // 新建目錄 } try { File zipFile = new File(zipFilePath + "/" + fileName +".zip"); if(zipFile.exists()){ System.out.println(zipFilePath + "目錄下存在名字為:" + fileName +".zip" +"打包檔案."); }else{ File[] sourceFiles = sourceFile.listFiles(); if(null == sourceFiles || sourceFiles.length<1){ System.out.println("待壓縮的檔案目錄:" + sourceFilePath + "裡面不存在檔案,無需壓縮."); }else{ fos = new FileOutputStream(zipFile); zos = new ZipOutputStream(new BufferedOutputStream(fos)); byte[] bufs = new byte[1024*10]; for(int i=0;i<sourceFiles.length;i++){ //建立ZIP實體,並新增進壓縮包 ZipEntry zipEntry = new ZipEntry(sourceFiles[i].getName()); zos.putNextEntry(zipEntry); //讀取待壓縮的檔案並寫進壓縮包裡 fis = new FileInputStream(sourceFiles[i]); bis = new BufferedInputStream(fis, 1024*10); int read = 0; while((read=bis.read(bufs, 0, 1024*10)) != -1){ zos.write(bufs,0,read); } } flag = true; } } } catch (FileNotFoundException e) { e.printStackTrace(); throw new RuntimeException(e); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } finally{ //關閉流 try { if(null != bis) bis.close(); if(null != zos) zos.close(); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } } return flag; } }

三、呼叫示例

//檔案物件
File file = new File();//也可以是資料夾路徑
//待生成的zip包名
String zipName = new Date().getTime()+GetRandom.getRandomInteger(6);
//待生成的zip儲存路徑
String zipFilePath = "../xx/xx";
//壓縮
FileToZip.fileToZip(file , zipFilePath , zipName);