java压缩zip文件,支持多重文件夹压缩

 /**
     *压缩文件
     * @param sourceFile 需要压缩的文件路径 E://a
     * @param toFolerName 存放压缩后文件的路径+文件名称 E://b//das.zip
     * @throws Exception
     */
    public static void fileToZip(String sourceFile, String toFolerName) throws Exception {  
    	 
        List fileList = getSubFiles(new File(sourceFile)); //得到待压缩的文件夹的所有内容    
        ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(  
                toFolerName));  
 
        ZipEntry ze = null;  
        byte[] buf = new byte[1024];  
        int readLen = 0;  
        for (int i = 0; i < fileList.size(); i++) { //遍历要压缩的所有子文件    
            File file = (File) fileList.get(i);  
            System.out.println("压缩到的文件名:" + file.getName());  
            ze = new ZipEntry(getAbsFileName(sourceFile, file));  
            ze.setSize(file.length());  
            ze.setTime(file.lastModified());  
            zos.putNextEntry(ze);  
            InputStream is = new BufferedInputStream(new FileInputStream(file));  
            while ((readLen = is.read(buf, 0, 1024)) != -1) {  
                zos.write(buf, 0, readLen);  
            }  
            is.close();  
        }  
        zos.close();  
        System.out.println("压缩完成!");  
    }  
    private static List<File> getSubFiles(File baseDir) {  
        List<File> ret = new ArrayList<File>();  
        File[] tmp = baseDir.listFiles();  
        for (int i = 0; i < tmp.length; i++) {  
            if (tmp[i].isFile())  
                ret.add(tmp[i]);  
            if (tmp[i].isDirectory())  
                ret.addAll(getSubFiles(tmp[i]));  
        }  
        return ret;  
    }  
    private static String getAbsFileName(String baseDir, File realFileName) {  
        File real = realFileName;  
        File base = new File(baseDir);  
        String ret = real.getName();  
        while (true) {  
            real = real.getParentFile();  
            if (real == null)  
                break;  
            if (real.equals(base))  
                break;  
            else 
                ret = real.getName() + "/" + ret;  
        }  
        return ret;  
    }  

猜你喜欢

转载自blog.csdn.net/qq_38567039/article/details/80984641
今日推荐