集册 Java实例教程 将文件列表压缩为目标zip文件

将文件列表压缩为目标zip文件

欢马劈雪     最近更新时间:2020-01-02 10:19:05

505
将文件列表压缩为目标zip文件


//package com.nowjava;/* from nowjava - 时  代  Java*/

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.util.ArrayList;

import java.util.List;

import java.util.zip.ZipEntry;
/** 
 来自 时   代    Java - nowjava.com**/


import java.util.zip.ZipOutputStream;


public class Main {

    /**

     * Size of the buffer to read/write data

     */

    private static final int BUFFER_SIZE = 4096;


    /**

     * Compresses a list of files to a destination zip file

     * 

     * @param listFiles

     *            A collection of files and directories

     * @param destZipFilePath

     *            The path of the destination zip file

     * @throws FileNotFoundException

     * @throws IOException

     */

    public static void zip(List<File> listFiles, String destZipFilePath)

            throws FileNotFoundException, IOException {

        ZipOutputStream zos = null;

        try {

            zos = new ZipOutputStream(new FileOutputStream(destZipFilePath));

            for (File file : listFiles) {

                if (file.isDirectory()) {

                    zipDirectory(file, file.getName(), zos);

                } else {

                    zipFile(file, zos);

                }

            }

        } finally {

            zos.flush();

            zos.close();

        }

    }


    /**

     * Compresses files represented in an array of paths

     * 

     * @param files

     *            a String array containing file paths

     * @param destZipFilePath

     *            The path of the destination zip file

     * @throws FileNotFoundException

     * @throws IOException

     */

    public static void zip(String[] files, String destZipFilePath)

            throws FileNotFoundException, IOException {

        List<File> listFiles = new ArrayList<File>();

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

            listFiles.add(new File(files[i]));

        }

        zip(listFiles, destZipFilePath);

    }


    /**

     * Adds a directory to the current zip output stream

     * 

     * @param folder

     *            the directory to be added

     * @param parentFolder

     *            the path of parent directory

     * @param zos

     *            the current zip output stream

     * @throws FileNotFoundException

     * @throws IOException

     */

    private static void zipDirectory(File folder, String parentFolder,

            ZipOutputStream zos) throws FileNotFoundException, IOException {

        for (File file : folder.listFiles()) {

            if (file.isDirectory()) {

                zipDirectory(file, parentFolder + "/" + file.getName(), zos);

                continue;

            }

            zos.putNextEntry(new ZipEntry(parentFolder + "/"

                    + file.getName()));

            BufferedInputStream bis = null;

            try {

                bis = new BufferedInputStream(new FileInputStream(file));

                long bytesRead = 0;

                byte[] bytesIn = new byte[BUFFER_SIZE];

                int read = 0;

                while ((read = bis.read(bytesIn)) != -1) {

                    zos.write(bytesIn, 0, read);

                    bytesRead += read;

                }

                zos.closeEntry();

            } finally {

                bis.close();

            }

        }

    }


    /**

     * Adds a file to the current zip output stream

     * 

     * @param file

     *            the file to be added

     * @param zos

     *            the current zip output stream

     * @throws FileNotFoundException

     * @throws IOException

     */

    private static 
展开阅读全文