读取zip文件,然后根据读取的数据在创建个zip

功能接收zip文件流,然后创建zip文件,现在想自己先写个demo读取zip文件,然后根据读取的数据在创建个zip

2个回答

 HttpPost httppost = new HttpPost(url);  

            FileBody bin = new FileBody(new File(zipPath));  //zipPath压缩包路径
            StringBody comment = new StringBody(zipName);  
            Charset charSet=Charset.forName("UTF-8");
            StringBody context = new StringBody(obj.toString(),charSet); 
            HttpEntity reqEntity =MultipartEntityBuilder.create().addPart("file", bin).addPart("filename", comment).build();
            httppost.setEntity(reqEntity);
            HttpResponse response = httpclient.execute(httppost);  
            int statusCode = response.getStatusLine().getStatusCode(); 

package com.unplatform.vis.util;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipFileListUtil {

static final int BUFFER = 8192;

private File zipFile;   

public ZipFileListUtil(String pathName) {   
    zipFile = new File(pathName);   
}   
public void compress(File[] fileName) { 
    ZipOutputStream out = null;   
    try {  
        FileOutputStream fileOutputStream = new FileOutputStream(zipFile);   
        CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,   
                new CRC32());   
        out = new ZipOutputStream(cos);   
        String basedir = ""; 
        for (int i=0;i<fileName.length;i++){
            compress(new File(fileName[i].getAbsolutePath()), out, basedir);   
        }
        out.close();  
    } catch (Exception e) {   
        throw new RuntimeException(e);   
    } 
}   
public void compress(String srcPathName) {   
    File file = new File(srcPathName);   
    if (!file.exists())   
        throw new RuntimeException(srcPathName + "不存在!");   
    try {   
        FileOutputStream fileOutputStream = new FileOutputStream(zipFile);   
        CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,   
                new CRC32());   
        ZipOutputStream out = new ZipOutputStream(cos);   
        String basedir = "";   
        compress(file, out, basedir);   
        out.close();   
    } catch (Exception e) {   
        throw new RuntimeException(e);   
    }   
}   

private void compress(File file, ZipOutputStream out, String basedir) {   
    /* 判断是目录还是文件 */  
    if (file.isDirectory()) {   
        System.out.println("压缩:" + basedir + file.getName());   
        this.compressDirectory(file, out, basedir);   
    } else {   
        System.out.println("压缩:" + basedir + file.getName());   
        this.compressFile(file, out, basedir);   
    }   
}   

/** 压缩一个目录 */  
private void compressDirectory(File dir, ZipOutputStream out, String basedir) {   
    if (!dir.exists())   
        return;   

    File[] files = dir.listFiles();   
    for (int i = 0; i < files.length; i++) {   
        /* 递归 */  
        compress(files[i], out, basedir + dir.getName() + "/");   
    }   
}   

/** 压缩一个文件 */  
private void compressFile(File file, ZipOutputStream out, String basedir) {   
    if (!file.exists()) {   
        return;   
    }   
    try {   
        BufferedInputStream bis = new BufferedInputStream(   
                new FileInputStream(file));   
        ZipEntry entry = new ZipEntry(basedir + file.getName());   
        out.putNextEntry(entry);   
        int count;   
        byte data[] = new byte[BUFFER];   
        while ((count = bis.read(data, 0, BUFFER)) != -1) {   
            out.write(data, 0, count);   
        }   
        bis.close();   
    } catch (Exception e) {   
        throw new RuntimeException(e);   
    }   
}   

}

package com.unplatform.vis.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.GZIPOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ZipUtil {
private static final Logger logger = LoggerFactory.getLogger(ZipUtil.class);
/**
* 压缩成ZIP文件
* zipFileName 压缩后文件路径 inputFile待压缩文件夹目录
**/
public static void zip(String zipFileName, File inputFile) throws Exception {
logger.info("压缩文件夹中...");
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));
BufferedOutputStream bo = new BufferedOutputStream(out);
//zip(out, inputFile, inputFile.getName(), out);
zip(out, inputFile, inputFile.getName(), bo);
bo.close();
out.close(); // 输出流关闭
logger.info("压缩文件夹完成");
}

public static void zip(ZipOutputStream out, File f, String base,BufferedOutputStream  bo) throws Exception { // 方法重载
    if (f.isDirectory()) {
        File[] fl = f.listFiles();
        if (fl.length == 0) {
            out.putNextEntry(new ZipEntry(base + "/")); // 创建zip压缩进入点base
            //System.out.println(base + "/");
        }
        for (int i = 0; i < fl.length; i++) {
            zip(out, fl[i], base + "/" + fl[i].getName(), bo);// 递归遍历子文件夹
        }
        bo.flush();
    } else {
        out.putNextEntry(new ZipEntry(base)); // 创建zip压缩进入点base
        //System.out.println("-------------base:"+base);
        FileInputStream in = new FileInputStream(f);
        BufferedInputStream bi = new BufferedInputStream(in);
        int b;
        while ((b = bi.read()) != -1) {
            bo.write(b); // 将字节流写入当前zip目录
        }

        bo.flush();

// byte[] buf = new byte[1024*1024];
// while ((b = in.read(buf)) != -1) {
// bo.write(buf, 0, b);
// }

        bi.close();
        in.close(); // 输入流关闭
    }
}




/*解压缩
 * zipFileName 源zip路径 ,unZipPath 输出路径(文件夹目录)
 * */
public static void unZip(String zipFileName,String unZipPath){
    logger.info("开始解压ZIP文件: "+zipFileName);
    long startTime=System.currentTimeMillis();
    try {
        ZipInputStream zin=new ZipInputStream(new FileInputStream(zipFileName));//输入源zip路径
        BufferedInputStream bin=new BufferedInputStream(zin);
        File Fout=null;
        ZipEntry entry;
        try {
            while((entry = zin.getNextEntry())!=null ){
                if(entry.isDirectory()){
                    //目录
                    Fout=new File(unZipPath,entry.getName());
                    if(!Fout.exists()){
                        Fout.mkdirs();
                    }
                }else{
                    //文件
                    Fout=new File(unZipPath,entry.getName());
                    if(!Fout.exists()){
                        (new File(Fout.getParent())).mkdirs();
                    }
                    FileOutputStream out=new FileOutputStream(Fout);
                    BufferedOutputStream Bout=new BufferedOutputStream(out);
                    int b;
                    while((b=bin.read())!=-1){
                        Bout.write(b);
                    }
                    Bout.flush();
                    Bout.close();
                    out.close();
                }
                //System.out.println(Fout+"解压成功");  
            }
            bin.close();
            zin.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    long endTime=System.currentTimeMillis();
    logger.info("解压ZIP文件耗时: "+(endTime-startTime)+" ms");
}

// public static void main(String[] args) {
// ZipUtil book = new ZipUtil();

// try {
// //book.zip("d:\zl.zip",new File("d:\zl"));
// //book.unZip("d:\Huatai2_1.5.zip","e:\");
// book.zip("Z:\ceshi.zip",new File("Z:\测试输出"));
//
// } catch (Exception e) {

// e.printStackTrace();

// }

// }

/** 
 * 加载本地文件,并转换为byte数组 
 * @return 
 */  
public static byte[] loadFile(String zipFileName) {  
    File file = new File(zipFileName);  
    FileInputStream fis = null;  
    ByteArrayOutputStream baos = null;  
    byte[] data = null ;  

    try {  
        fis = new FileInputStream(file);  
        baos = new ByteArrayOutputStream((int) file.length());  

        byte[] buffer = new byte[1024];  
        int len = -1;  
        while ((len = fis.read(buffer)) != -1) {  
            baos.write(buffer, 0, len);  
        }  

        data = baos.toByteArray() ;  

    } catch (IOException e) {  
        e.printStackTrace();  
    } finally {  
        try {  
            if (fis != null) {  
                fis.close();  
                fis = null;  
            }  

            baos.close() ;  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  

    return data ;  
} 

/** 
 * 对byte[]进行压缩 
 *  
 * @param 要压缩的数据 
 * @return 压缩后的数据 
 */  
public static byte[] compress(byte[] data) {  
    System.out.println("before:" + data.length);  

    GZIPOutputStream gzip = null ;  
    ByteArrayOutputStream baos = null ;  
    byte[] newData = null ;  

    try {  
        baos = new ByteArrayOutputStream() ;  
        gzip = new GZIPOutputStream(baos);  

        gzip.write(data);  
        gzip.finish();  
        gzip.flush();  

        newData = baos.toByteArray() ;  
    } catch (IOException e) {  
        e.printStackTrace();  
    } finally {  
        try {  
            gzip.close();  
            baos.close() ;  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  

    System.out.println("after:" + newData.length);  
    return newData ;  
}  

}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!