Java解/压/缩多个文件目录

java压缩—-解压(亲测)

package com.CloudDisk.Extend;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipFile;



public class ZipOutPutStreamExtend {

    public static void ZipFiles(File zip,String path,File... srcFiles) throws IOException{  
        ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zip));  
        ZipFiles(out,path,srcFiles);  
        out.close();  
    }  
    public static void ZipFiles(ZipOutputStream out,String path,File... srcFiles){  
        path = path.replaceAll("\\*", "/");  
        if(!path.endsWith("/")){  
            path+="/";  
        }  
        byte[] buf = new byte[1024];  
        try {  
            for(int i=0;i<srcFiles.length;i++){  
                if(srcFiles[i].isDirectory()){  
                    File[] files = srcFiles[i].listFiles();  
                    String srcPath = srcFiles[i].getName();  
                    srcPath = srcPath.replaceAll("\\*", "/");  
                    if(!srcPath.endsWith("/")){  
                        srcPath+="/";  
                    }  
                    out.putNextEntry(new ZipEntry(path+srcPath));  
                    ZipFiles(out,path+srcPath,files);  
                }  
                else{  
                    FileInputStream in = new FileInputStream(srcFiles[i]);  
                    System.out.println(path + srcFiles[i].getName());  
                    out.putNextEntry(new ZipEntry(path + srcFiles[i].getName()));  
                    int len;  
                    while((len=in.read(buf))>0){  
                        out.write(buf,0,len);  
                    }  
                    out.closeEntry();  
                    in.close();  
                }  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    } 


    public static void unZipFiles(String zipPath,String descDir)throws IOException{  
        unZipFiles(new File(zipPath), descDir);  
    }  

    @SuppressWarnings("rawtypes")  
    public static void unZipFiles(File zipFile,String descDir)throws IOException{  
        File pathFile = new File(descDir);  
        if(!pathFile.exists()){  
            pathFile.mkdirs();  
        }  
        ZipFile zip = new ZipFile(zipFile);  
        for(Enumeration entries = zip.getEntries();entries.hasMoreElements();){  
            ZipEntry entry = (ZipEntry)entries.nextElement();  
            String zipEntryName = entry.getName();  
            InputStream in = zip.getInputStream((ZipArchiveEntry) entry);  
            String outPath = (descDir+zipEntryName).replaceAll("\\*", "/");;  

            File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));  
            if(!file.exists()){  
                file.mkdirs();  
            }  

            if(new File(outPath).isDirectory()){  
                continue;  
            }  

            OutputStream out = new FileOutputStream(outPath);  
            byte[] buf1 = new byte[1024];  
            int len;  
            while((len=in.read(buf1))>0){  
                out.write(buf1,0,len);  
            }  
            in.close();  
            out.close();  
            }  
    }  
/*    public static void main(String[] args) throws IOException {  

        File[] files = new File[]{new File("F:/新建文本文档.txt"),new File("F:/text"),new File("F:/threadLog.log")};  
        File zip = new File("F:/压缩.zip");  
        ZipFiles(zip,"abc",files);  


        File zipFile = new File("F:/压缩.zip");  
        String path = "F:/zipfile/";  
        unZipFiles(zipFile, path); 

    }*/  
}

//输出的流
    public InputStream getInputStream() throws IOException {
        File zip = new File(getFilepath() + "/下载/Minecraft云盘网.zip");
        if (filesname.length == 1) {

            if (filesname[0].indexOf(".") != -1) {
                fileslastname = filesname[0];
                return new BufferedInputStream(new FileInputStream(
                        getFilepath() + "/" + fileName + "/" + filesname[0]));
            } else {
                File f = new File(getFilepath() + "/" + fileName + "/"
                        + filesname[0]);
                ZipOutPutStreamExtend.ZipFiles(zip, filesname[0], f);
            }
        } else {

            File[] files = new File[filesname.length];
            for (int i = 0; i < filesname.length; i++) {
                files[i] = new File(getFilepath() + "/" + fileName + "/"
                        + filesname[i]);
            }

            String title = files[0].getName();
            ZipOutPutStreamExtend.ZipFiles(zip, title + "等文件", files);
        }
        fileslastname = "Minecraft云盘网 .zip";
        fileslastname = new String(fileslastname.getBytes("GBK"), "ISO-8859-1");
        return new BufferedInputStream(new FileInputStream(getFilepath()
                + "/下载/Minecraft云盘网.zip"));
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值