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

本文实例为大家分享了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());
       }
     }
 }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java使用gzip实现文件解压缩示例

    复制代码 代码如下: package com.cjonline.foundation.cpe.action; import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.

  • java生成压缩文件示例代码

    代码: 复制代码 代码如下: import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream; import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipOutputStream; /**  * @project: Test  * @author

  • java压缩zip文件中文乱码问题解决方法

    通常用java来打包文件生成压缩文件后,有如下两个地方会出现乱码 : 1.内容的中文乱码问题,这个问题网上很多人给出了解决方法,主要有两种方法:一是修改sun的源码:另一个是使用开源的类库org.apache.tools.zip.ZipOutputStream和org.apache.tools.zip.ZipEntry,这两个类ant.jar中有,可以直接下载使用即可,毫无疑问,选择后者更方便 2.压缩文件注释的中文乱码问题:zos.setComment("中文测试");这个问题网上对

  • 使用Java生成jpg与压缩图片为jpg文件的代码示例

    Java生成jpg格式图片: package other.pic; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.RandomAccessFile; import java.awt.imag

  • 实例展示使用Java压缩和解压缩7z文件的方法

    压缩为7z文件 首先网络上对7z的压缩内容很少. 尤其是java调用进行压缩的是更少了. 一下是自己完成的一个压缩. 本人进行了测试是成功的. 将压缩的流写如磁盘一个压缩文件中. 然后使用7z的压缩软件进行打开解压. 7-zip的开源项目7-zip-JBinding项目地址(sourceforge) 不多说,调用7z源码进行压缩的方法如下. public byte[] lzmaZip(String xml) throws IOException{ BufferedInputStream inSt

  • java实现文件上传下载和图片压缩代码示例

    分享一个在项目中用的到文件上传下载和对图片的压缩,直接从项目中扒出来的:) 复制代码 代码如下: package com.eabax.plugin.yundada.utils; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.

  • java实现文件压缩成zip的工具类

    最近碰到个需要下载zip压缩包的需求,于是我在网上找了下别人写好的zip工具类.但找了好多篇博客,总是发现有bug.因此就自己来写了个工具类. 这个工具类的功能为: (1)可以压缩文件,也可以压缩文件夹 (2)同时支持压缩多级文件夹,工具内部做了递归处理 (3)碰到空的文件夹,也可以压缩 (4)可以选择是否保留原来的目录结构,如果不保留,所有文件跑压缩包根目录去了,且空文件夹直接舍弃.注意:如果不保留文件原来目录结构,在碰到文件名相同的文件时,会压缩失败. (5)代码中提供了2个压缩文件的方法,

  • Java创建ZIP压缩文件的方法

    本文实例讲述了Java创建ZIP压缩文件的方法.分享给大家供大家参考.具体如下: 这里注意:建议使用org.apache.tools.zip.*包下相关类,否则可能会出现中文乱码问题. /** * 压缩文件夹 * @param sourceDIR 文件夹名称(包含路径) * @param targetZipFile 生成zip文件名 * @author liuxiangwei */ public static void zipDIR(String sourceDIR, String target

  • Java实现多文件压缩打包的方法

    本文实例讲述了Java实现多文件压缩打包的方法.分享给大家供大家参考,具体如下: package com.biao.test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.Enumeration; import java.u

  • java压缩多个文件并且返回流示例

    这个类可以压缩多个文件并且返回流,在程序中可以再操作返回的流做其它功能,比如验证MD5,下面看代码吧 复制代码 代码如下: /*** 方法描述:<b>测试类</b></br>*/public class TestFileStream{ //文件和压缩包存储的位置StringtempFilePath="C:/temp/"List<String>fileList=newArrayList<String>();fileList.ad

随机推荐