温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java如何实现多个文件压缩成压缩包

发布时间:2021-04-15 13:52:17 来源:亿速云 阅读:338 作者:小新 栏目:编程语言

小编给大家分享一下java如何实现多个文件压缩成压缩包,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

具体内容如下

需要用到的ant.jar

package util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; public class ZipTools {    public static final String ZIP_FILENAME = ""; //需要解压缩的文件名    public static final String ZIP_DIR = "";  //需要压缩的文件夹    public static final String UN_ZIP_DIR = "";  //要解压的文件目录    public static final int BUFFER = 1024 ;  //缓存大小  public static void zipFile(String baseDir,String fileName) throws Exception{      List fileList=getSubFiles(new File(baseDir));      ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(fileName));      ZipEntry ze=null;      byte[] buf=new byte[BUFFER];      int readLen=0;      for(int i = 0; i <fileList.size(); i++) {        File f=(File)fileList.get(i);        ze=new ZipEntry(getAbsFileName(baseDir, f));        ze.setSize(f.length());        ze.setTime(f.lastModified());          zos.putNextEntry(ze);        InputStream is=new BufferedInputStream(new FileInputStream(f));        while ((readLen=is.read(buf, 0, BUFFER))!=-1) {          zos.write(buf, 0, readLen);        }        is.close();      }      zos.close();    }  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;    }  private static List getSubFiles(File baseDir){      List ret=new ArrayList();      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;    }  public static void upZipFile() throws Exception{      ZipFile zfile=new ZipFile(ZIP_FILENAME);      Enumeration zList=zfile.entries();      ZipEntry ze=null;      byte[] buf=new byte[1024];      while(zList.hasMoreElements()){        ze=(ZipEntry)zList.nextElement();            if(ze.isDirectory()){          File f=new File(ZIP_DIR+ze.getName());          f.mkdir();          continue;        }        OutputStream os=new BufferedOutputStream(new FileOutputStream(getRealFileName(ZIP_DIR, ze.getName())));        InputStream is=new BufferedInputStream(zfile.getInputStream(ze));        int readLen=0;        while ((readLen=is.read(buf, 0, 1024))!=-1) {          os.write(buf, 0, readLen);        }        is.close();        os.close();       }      zfile.close();    }  public static File getRealFileName(String baseDir, String absFileName){      String[] dirs=absFileName.split("/");      File ret=new File(baseDir);      if(dirs.length>1){        for (int i = 0; i < dirs.length-1;i++) {          ret=new File(ret, dirs[i]);        }        if(!ret.exists())          ret.mkdirs();        ret=new File(ret, dirs[dirs.length-1]);        return ret;      }      return ret;    }  public static void deleteDirFile(String path){    File file=new File(path);    if(file.isDirectory()){    //如果是目录,先递归删除      String[] list=file.list();      for(int i=0;i<list.length;i++){      deleteDirFile(path+"\\"+list[i]); //先删除目录下的文件      }    }        file.delete();  } public static String newFolder(String dir){  java.io.File myFilePath=new java.io.File(dir);  if(myFilePath.isDirectory()){}else{   myFilePath.mkdirs();  }  return dir;  } public static String getFileNames(String path){       File file = new File(path);      // get file list where the path has     File[] array = file.listFiles();     // 获得文件列表      String pdfNames="";     for(int i=0;i<array.length;i++){         if(array[i].isFile()){           if(array[i].getName().endsWith(".pdf")){  //获得pdf文件名称          pdfNames+=array[i].getName().substring(0,array[i].getName().length()-4)+",";         }       }      }     if(pdfNames.length()>0){      pdfNames.substring(0,pdfNames.length()-1);     }     return pdfNames;   } public static void copyFile(String oldPath, String newPath) {     try {       int bytesum = 0;       int byteread = 0;       File oldfile = new File(oldPath);       if (oldfile.exists()) {     //文件存在时         InputStream inStream = new FileInputStream(oldPath); //读入原文件         FileOutputStream fs = new FileOutputStream(newPath);         byte[] buffer = new byte[1444];         while ( (byteread = inStream.read(buffer)) != -1) {           bytesum += byteread;    //字节数文件大小           fs.write(buffer, 0, byteread);         }         inStream.close();       }     }     catch (Exception e) {       System.out.println("copy file error!");       e.printStackTrace();     }   } public static boolean fileExist(String fileNames,String pdfName){  boolean flag=false;  if(!"".equals(fileNames)){   String[] nameArr=fileNames.split(",");   for(int i=0;i<nameArr.length;i++){   if(pdfName.equals(nameArr[i])){    //如果文件名相同则执行拷贝操作(拷贝到zip目录准备打包)    flag=true;    break;   }   }  }  return flag;  } public static void deleteFileAndDir(String path){   File file = new File(path);        File[] array = file.listFiles();       for(int i=0;i<array.length;i++){          if(array[i].isFile()){          array[i].delete();        }else if(array[i].isDirectory()){          deleteDirFile(array[i].getPath());         }        }    } }

看完了这篇文章,相信你对“java如何实现多个文件压缩成压缩包”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI