zoukankan      html  css  js  c++  java
  • zip压缩

    package com.camelot.util.mail;

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.LinkedList;
    import java.util.List;

    import org.apache.tools.zip.ZipEntry;
    import org.apache.tools.zip.ZipOutputStream;

    public class PackZip {

    public static void main(String[] args) {

    //需要压缩得文件夹
    File[] files ={
    new File("C:/Users/Administrator/Desktop/1")
    };
    //压缩后的地址 和名称
    File targetFile = new File("C:/Users/Administrator/Desktop/1.zip");
    //开始压缩
    try {
    zip(files,targetFile);
    } catch (IOException e) {
    }
    }
    public static int zip(File[] files,File targetFile) throws IOException{
    int flag = 0;
    files = toAbs(files);//String parentPath = files[0].getAbsoluteFile().getParent();
    targetFile = targetFile.getAbsoluteFile();//得到绝对路径
    String parentPath = files[0].getParent()+"\";//得到父路径

    files = eachFiles(files);
    ZipOutputStream zos = new ZipOutputStream(targetFile);
    zos.setEncoding("utf-8");
    try{
    byte[] buf = new byte[1024*1024];
    for(File f:files){
    zipFile(f,zos,parentPath,buf);
    }
    flag = 1;
    } finally{
    zos.close();
    }
    return flag ;
    }
    private static File[] toAbs(File[] files) {
    ArrayList<File> list = new ArrayList<>();
    for(File f:files){
    list.add(f.getAbsoluteFile());
    }
    return list.toArray(new File[0]);
    }
    private static File[] eachFiles(File[] files) {
    List<File> list = new ArrayList<>();
    LinkedList<File> tasks = new LinkedList<File>(Arrays.asList(files));
    while( !tasks.isEmpty() ) {
    // System.out.println(tasks);
    File task = tasks.remove();
    list.add(task);
    System.out.println(task+"-----开始");
    if( !task.isDirectory() ) {
    System.out.println(task+"-----结束");
    continue;
    }
    for( File c : task.listFiles() ){
    tasks.add(c);
    }
    System.out.println(task+"-----结束");
    }
    return list.toArray(new File[0]);
    }
    public static void zipFile(File f, ZipOutputStream zos, String parentPath, byte[] buf) throws IOException {
    String filename = f.toString().replace(parentPath, "");
    if(f.isDirectory()){//关键
    filename+="/";
    }
    ZipEntry ze = new ZipEntry(filename);
    zos.putNextEntry(ze);
    try{
    if(f.isFile()){
    doZip(f,zos,buf);
    }
    }finally{
    zos.closeEntry();
    }
    }
    private static void doZip(File f, ZipOutputStream zos, byte[] buf) throws IOException {
    FileInputStream fis = new FileInputStream(f);
    int len;
    try{
    zos.setEncoding("gbk");
    while((len=fis.read(buf))!=-1){
    zos.write(buf, 0, len);
    }
    }finally{
    fis.close();
    }
    }
    }

  • 相关阅读:
    轮循与连接
    ps中锯齿问题的解决方法
    Linux+Apache+MySQL+PHP安装
    Map map=new HashMap()与HashMap map=new HashMap()的区别
    wdcp常用工具及命令集
    ecshop调试
    纯净版CentOS64位安装LAMP的时候出现的问题总结
    Alertmanager配置webhook
    一个Repeater排序用的控件
    一道面试题模拟实现简易的移动用户资费统计系统逻辑
  • 原文地址:https://www.cnblogs.com/whb11/p/6375856.html
Copyright © 2011-2022 走看看