• ZipUtils-工具类


    package zip;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.Enumeration;
    import java.util.List;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipFile;
    import java.util.zip.ZipOutputStream;
    
    /**
     * Class for Zip Utils
     *
     * @author
     */
    public class ZipUtils {
    
        private static ZipUtilities instance;
    
        public static ZipUtilities getInstance() {
            if (instance == null) {
                instance = new ZipUtilities();
            }
            return instance;
        }
    
        /**
         * Compress a file to a zip
         *
         * @param filename
         * @param zipFilename
         */
        public void compressFile(String filename, String zipFilename) {
            File file = new File(filename);
            File zipFileName = new File(zipFilename);
            List<File> fileList = new ArrayList<File>();
            fileList.add(file);
    
            try {
                FileOutputStream fos = new FileOutputStream(zipFilename);
                ZipOutputStream zos = new ZipOutputStream(fos);
    
                for (File file1 : fileList) {
                    if (!file1.isDirectory()) { // we only zip directory, not
                        // directories
                        addToZip(zipFileName, file, zos);
                    }
                }
    
                zos.close();
                fos.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
        /**
         * Compress a given directory recursively and store the zip in the provided
         * directory name
         *
         * @param fileDirectory
         * @param savedZipFileDirectory
         */
        public void compressDirectory(String fileDirectory,
                                      String savedZipFileDirectory) {
            File directoryToZip = new File(fileDirectory);
    
            List<File> fileList = new ArrayList<File>();
            try {
                System.out.println("---Getting references to all directory in: "
                        + directoryToZip.getCanonicalPath());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            getAllFiles(directoryToZip, fileList);
            System.out.println("---Creating zip file");
            String folder = savedZipFileDirectory + File.separator
                    + directoryToZip.getName();
    
            writeZipFile(folder, directoryToZip, fileList);
            System.out.println("---Done");
        }
    
        /**
         * Uncompress a zip file
         *
         * @param zipFileName
         */
        public void unCompressZipFile(String zipFileName) {
            try {
                ZipFile zipFile = new ZipFile(zipFileName);
                Enumeration<?> enu = zipFile.entries();
    
                while (enu.hasMoreElements()) {
                    ZipEntry zipEntry = (ZipEntry) enu.nextElement();
    
                    String name = zipEntry.getName();
                    long size = zipEntry.getSize();
                    long compressedSize = zipEntry.getCompressedSize();
                    System.out.printf(
                            "name: %-20s | size: %6d | compressed size: %6d
    ",
                            name, size, compressedSize);
    
                    File file = new File(name);
                    if (name.endsWith("/")) {
                        file.mkdirs();
                        continue;
                    }
    
                    File parent = file.getParentFile();
                    if (parent != null) {
                        parent.mkdirs();
                    }
    
                    InputStream is = zipFile.getInputStream(zipEntry);
                    FileOutputStream fos = new FileOutputStream(file);
                    byte[] bytes = new byte[1024];
                    int length;
                    while ((length = is.read(bytes)) >= 0) {
                        fos.write(bytes, 0, length);
                    }
                    is.close();
                    fos.close();
    
                }
                zipFile.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * Read all the files recursively from the directory
         *
         * @param dir
         * @param fileList
         */
        private void getAllFiles(File dir, List<File> fileList) {
            try {
                File[] files = dir.listFiles();
                for (File file : files) {
                    fileList.add(file);
                    if (file.isDirectory()) {
                        System.out.println("directory:" + file.getCanonicalPath());
                        getAllFiles(file, fileList);
                    } else {
                        System.out.println("     file:" + file.getCanonicalPath());
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * See the contents of a zip file
         */
        public void seeContentOfZipFile(String zipfile) {
            try {
                ZipFile zipFile = new ZipFile(zipfile);
                Enumeration<?> enu = zipFile.entries();
                while (enu.hasMoreElements()) {
                    ZipEntry zipEntry = (ZipEntry) enu.nextElement();
                    String name = zipEntry.getName();
                    long size = zipEntry.getSize();
                    long compressedSize = zipEntry.getCompressedSize();
                    System.out.printf(
                            "name: %-20s | size: %6d | compressed size: %6d
    ",
                            name, size, compressedSize);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * Create the zip file
         *
         * @param directoryToZip
         * @param fileList
         */
        private void writeZipFile(String folder, File directoryToZip,
                                  List<File> fileList) {
    
            try {
                FileOutputStream fos = new FileOutputStream(folder + ".zip");
                ZipOutputStream zos = new ZipOutputStream(fos);
    
                for (File file : fileList) {
                    if (!file.isDirectory()) { // we only zip directory, not
                        // directories
                        addToZip(directoryToZip, file, zos);
                    }
                }
    
                zos.close();
                fos.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * Add a file to the zip
         *
         * @param zipfilename
         * @param file
         * @param zos
         * @throws FileNotFoundException
         * @throws IOException
         */
        private void addToZip(File zipfilename, File file, ZipOutputStream zos)
                throws FileNotFoundException, IOException {
    
            FileInputStream fis = new FileInputStream(file);
    
            // we want the zipEntry's path to be a relative path that is relative
            // to the directory being zipped, so chop off the rest of the path
            String zipFilePath = file.getCanonicalPath().substring(
                    zipfilename.getCanonicalPath().length() + 1,
                    file.getCanonicalPath().length());
            System.out.println("Writing '" + zipFilePath + "' to zip file");
            ZipEntry zipEntry = new ZipEntry(zipFilePath);
            zos.putNextEntry(zipEntry);
    
            byte[] bytes = new byte[1024];
            int length;
            while ((length = fis.read(bytes)) >= 0) {
                zos.write(bytes, 0, length);
            }
    
            zos.closeEntry();
            fis.close();
        }
    
        /**
         * Compress a given list of Files to the given zipped file name
         *
         * @param fileList
         * @param zipfileName
         */
    
        public void compressFiles(List<File> fileList, String zipfileName) {
    
            File zip = new File(zipfileName);
            try {
                FileOutputStream fos = new FileOutputStream(zip);
                ZipOutputStream zos = new ZipOutputStream(fos);
    
                for (File file1 : fileList) {
                    if (!file1.isDirectory()) { // we only zip directory, not
                        // directories
                        addToZip(zip, file1, zos);
                    }
                }
    
                zos.close();
                fos.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    }
  • 相关阅读:
    ArcGIS为面要素生成邻接矩阵
    图片整理备份
    导出CityGML
    [ML] 数据处理
    微信公众号开发之access_token的全局共用
    DataReader转Dictionary数据类型之妙用
    标准化接口系统改造
    利用通用权限管理系统底层解决数据从不同库的导入导出问题
    通用权限管理系统中数据权限功能开发及使用说明
    常用API接口签名验证参考
  • 原文地址:https://www.cnblogs.com/bevis-byf/p/12161708.html
Copyright © 2020-2023  润新知