java 压缩文件Or目录

/**
     * 
     * 方法简介.fileOrDirectory :源文件路径,compfile : zipfile
     *
     * @author HSG
     * @date 创建时间 2018年7月4日
     * @since V1.0
     */
    public static void compressFileToZip(File fileOrDirectory,
            File compfile) throws IOException {
        ZipOutputStream out = null;
        try {
            out = new ZipOutputStream(compfile);
            out.setEncoding("GBK"); 
            if (fileOrDirectory.isFile()) {
                zipFileOrDirectory(out, fileOrDirectory, "");
            } else {
                File[] entries = fileOrDirectory.listFiles();
                for (int i = 0; i < entries.length; i++) {
                    zipFileOrDirectory(out, entries[i], "");
                }
            }
            compfile = null;
            fileOrDirectory = null;
        } catch (IOException ex) {
            if (out != null) {
                try {
                    out.close();
                } catch (IOException exx) {
                    throw exx;
                }
            }
            out = null;
            ex.printStackTrace();
            throw ex;
        } 
        if (out != null) {
            try {
                out.close();
            } catch (IOException ex) {
                throw ex;
            }
        }
        out = null;
    }
    /**
     * 
     * 方法简介.
     *
     * @author HSG
     * @date 创建时间 2018年7月4日
     * @since V1.0
     */
    private static void zipFileOrDirectory(ZipOutputStream out, File compresobject,
            String curPath) throws IOException {
        FileInputStream in = null;
        try {
            if (!compresobject.isDirectory()) {
                // 压缩文件
                byte[] buffer = new byte[4096];
                int bytes_read;
                in = new FileInputStream(compresobject);
                ZipEntry entry = new ZipEntry(curPath
                        + compresobject.getName());
                //System.out.println(compresobject.getName());
                out.setEncoding("GBK");
                out.putNextEntry(entry);
                while ((bytes_read = in.read(buffer)) != -1) {
                    out.write(buffer, 0, bytes_read);
                }
                out.closeEntry();
            } else {
                // 压缩目录
                File[] entries = compresobject.listFiles();
                for (int i = 0; i < entries.length; i++) {
                    // 递归压缩,更新curPaths
                    zipFileOrDirectory(out, entries[i], curPath
                            + compresobject.getName() + "/");
                }
            }
        } catch (IOException ex) {
            ex.printStackTrace();
            throw ex;
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException ex) {
                    ex.printStackTrace();
                    throw ex;
                }
            }
            in = null;
        }
    }

上一篇:文件写入的6种方法,这种方法性能最好


下一篇:Java - IO入门实现简单的转存