java压缩文件

关于java压缩文件的一些问题

这段时间涉及到一个将不同目录下的file文件压缩到一个zip文件中,同时要保留原来的目录结构。
使用的压缩工具包是ant下的org.apache.tools.zip包(效率高)
java 的 zip压缩过程中,只要识别到
ZipEntry ze = new ZipEntry("/1/1.txt");.
new 一个 ZipEntry传入的参数中存在一个"/",就会在压缩文件中创建一个文件夹,以此来保持原来文件的目录结构

File file = new File("F:/file/1.zip");
try {
    //先确定输出的文件
    FileOutputStream fos = new FileOutputStream(file);
    ZipOutputStream zos = new ZipOutputStream(fos);
    
    byte[] buf = new byte[9216];
    int len;
    //设置需要压缩的文件在压缩文件中的位置
    ZipEntry ze = new ZipEntry("/1/1.txt");
    zos.putNextEntry(ze);
    
    FileInputStream fis = new FileInputStream("F:/file/1.txt");
    BufferedInputStream bis = new BufferedInputStream(fis);
    while((len = bis.read(buf)) != -1){
        zos.write(buf, 0, len);
    }
    zos.closeEntry();
    fos.close();
    fis.close();
    bis.close();
    
} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
//对多个文件夹,不同目录结构的
public static void zip2(){
    String[] paths = new String[]{"/1/1.txt","/2/2.txt"};
    String[] relativePath = new String[]{"F:/file/1.txt","F:/file/2.txt"};
    try {
        File outFile = new File("F:/file/out.zip");
        FileOutputStream fos = new FileOutputStream(outFile);
        ZipOutputStream zos = new ZipOutputStream(fos);
        
        byte[] buf = new byte[9216];
        int len;
        
        for(int i=0;i<2;i++){
            ZipEntry ze = new ZipEntry(paths[i]);
            zos.putNextEntry(ze);
            FileInputStream fis = new FileInputStream(relativePath[i]);
            BufferedInputStream bis = new BufferedInputStream(fis);
            while((len = bis.read(buf)) != -1){
                zos.write(buf, 0, len);
            }
            zos.closeEntry();
            fis.close();
            bis.close();
        }
        zos.close();
        fos.close();
    } catch (Exception e) {
        // TODO: handle exception
    }
}

你可能感兴趣的:(java压缩文件)