天天看點

把檔案夾下的所有檔案打包成一個zip包

2019獨角獸企業重金招聘Python工程師标準>>>

把檔案夾下的所有檔案打包成一個zip包

代碼如下:

一、打包過程:

所需要jar包:安裝上Java環境就可以了

package filetozip;

import java.io.BufferedInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

public class FilesToZip {

    public boolean fileToZips(String sourceFilePath,String zipFilePath,String zipFileName) throws Exception{

        boolean flag=false;

        BufferedInputStream bis=null;

        ZipOutputStream zos=null;

        File sourceFiles = new File(sourceFilePath);

        if(sourceFiles.exists()==false){

            System.out.println("待壓縮目錄"+sourceFiles+"不存在...");

        }else{

            //判斷待壓縮檔案是否已經被壓縮過 zipFiles--->fos--->zos設定壓縮包名稱

            File zipFiles = new File(zipFilePath+"//"+zipFileName+".zip");

            if(zipFiles.exists()){

                System.out.println(zipFilePath+"目錄下已經存在"+zipFileName+".zip"+"壓縮包...");

            }else {

                //得到指定目錄下的所有檔案夾,注意傳回的File數組,不是String數組

                File[] sourceFileList = sourceFiles.listFiles();

                if(null==sourceFileList||sourceFileList.length<1){

                    System.out.println(sourceFilePath+"目錄下沒有待壓縮的檔案...");

                }else {

                    FileOutputStream fos = new FileOutputStream(zipFiles);

                    zos = new ZipOutputStream(fos);

                    byte[] bys=new byte[1024*10];

                    for(int i=0;i<sourceFileList.length;i++){

                        //fileName:指定目錄下的檔案夾的名稱或檔案的名稱

                        String fileName = sourceFileList[i].getName();

                        //建立zip實體,并添加進壓縮包  ,zipEntry的值就是fileName的值

                        ZipEntry zipEntry = new ZipEntry(sourceFileList[i].getName());

                        //添加進壓縮包

                        zos.putNextEntry(zipEntry);

                        //讀取待壓縮檔案,并添加進壓縮包,FileInputStream讀的是一個具體檔案,不是一個檔案夾

                        FileInputStream fis = new FileInputStream(sourceFileList[i]);

                        //如果遇到bis存儲空間不夠,可以把1024*10的限制取消。

                        bis = new BufferedInputStream(fis, 1024*10);

                        //記錄目前讀取的位元組數

                        int reads=0;

                        while((reads=bis.read(bys, 0, 1024*10))!=-1){

                            zos.write(bys, 0, reads);

                        }

                    }

                    flag=true;

                    //特别注意,如果不關閉流端口,可能會導緻壓縮打包不成功!

                    if(null!=bis){

                        bis.close();

                    }

                    if(null!=zos){

                        zos.close();

                    }

                }

            }

        }

        return flag;

    }

}

二、測試:

package filetozip;

public class TestMian {

    public static void main(String[] args) throws Exception {

        FilesToZip ftz = new FilesToZip();

        //待打封包件所在的目錄

        String sourceFilePath="D://test//0000//000//001";

        //打好的壓縮包存放的位置

        String zipFilePath="D://test//zipRes";

        //壓縮包的名稱

        String zipFileName="2017-05-28";

        boolean result = ftz.fileToZips(sourceFilePath, zipFilePath, zipFileName);

        if(result){

            System.out.println("壓縮完成...");

        }else {

            System.out.println("壓縮失敗...");

        }

    }

}

轉載于:https://my.oschina.net/u/3197158/blog/910892