精华内容
下载资源
问答
  • 叙述 业务中需要将几文件压缩为一包,有以下解决方案。 代码 ...@param files 需要被压缩...@param zipFile 压缩后的目标zip文件 */ public static void zip(Path[] files, Path zipFile) throws IOException...

    转载自:https://springboot.io/t/topic/626

    叙述

    业务中需要将几个文件压缩为一个包,有以下解决方案。

    代码

    /**
    @param files 需要被压缩的文件
    @param zipFile 压缩后的目标zip文件
    */
    public static void zip(Path[] files, Path zipFile) throws IOException {
    		OutputStream outputStream = Files.newOutputStream(zipFile, StandardOpenOption.CREATE_NEW);
        	ZipOutputStream zipOutputStream = new ZipOutputStream(outputStream);
            for (Path file : files) {
            	InputStream inputStream = Files.newInputStream(file);
                zipOutputStream.putNextEntry(new ZipEntry(file.getFileName().toString()));
                int len;
                byte[] buffer = new byte[1024 * 10];
                while ((len = inputStream.read(buffer)) > 0) {
                    zipOutputStream.write(buffer, 0, len);
                }
                inputStream.close();
            }
            zipOutputStream.closeEntry();
            zipOutputStream.close();
            outputStream.close();
    	}

     

    展开全文
  • java源码:JavaZip压缩多个文件实例源码.rar
  • Java解压缩zip - 解压缩多个文件或文件夹

    万次阅读 多人点赞 2012-09-19 12:56:50
    Java压缩zip - 多个文件(包括文件夹) 对多个文件和文件夹进行压缩,对复杂的文件目录进行解压。 压缩方法使用的是可变参数,可以压缩1到多个文件..可以写数组的方式或者一个个写到参数列表里面... ZipFiles(zip...

    Java解压缩zip - 多个文件(包括文件夹)

     

    对多个文件和文件夹进行压缩,对复杂的文件目录进行解压。

    压缩方法使用的是可变参数,可以压缩1到多个文件..可以写数组的方式或者一个个写到参数列表里面...

     

    ZipFiles(zip,"abc",new File("d:/English"),new File("d:/发放数据.xls"));

     

     

    测试文件目录结构:

     

    测试的压缩内容:English文件夹和同级的两个excel文件

     

    File[] files = new File[]{new File("d:/English"),new File("d:/发放数据.xls"),new File("d:/中文名称.xls")};


    下面是压缩的代码:

     

     

    /**
    	 * 压缩文件-由于out要在递归调用外,所以封装一个方法用来
    	 * 调用ZipFiles(ZipOutputStream out,String path,File... srcFiles)
    	 * @param zip
    	 * @param path
    	 * @param srcFiles
    	 * @throws IOException
    	 * @author isea533
    	 */
    	public static void ZipFiles(File zip,String path,File... srcFiles) throws IOException{
    		ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zip));
    		ZipTest.ZipFiles(out,path,srcFiles);
    		out.close();
    		System.out.println("*****************压缩完毕*******************");
    	}
    	/**
    	 * 压缩文件-File
    	 * @param zipFile  zip文件
    	 * @param srcFiles 被压缩源文件
    	 * @author isea533
    	 */
    	public static void ZipFiles(ZipOutputStream out,String path,File... srcFiles){
    		path = path.replaceAll("\\\\", "/");
    		if(!path.endsWith("/")){
    			path+="/";
    		}
    		byte[] buf = new byte[1024];
    		try {
    			for(int i=0;i<srcFiles.length;i++){
    				if(srcFiles[i].isDirectory()){
    					File[] files = srcFiles[i].listFiles();
    					String srcPath = srcFiles[i].getName();
    					srcPath = srcPath.replaceAll("\\\\", "/");
    					if(!srcPath.endsWith("/")){
    						srcPath+="/";
    					}
    					out.putNextEntry(new ZipEntry(path+srcPath));
    					ZipFiles(out,path+srcPath,files);
    				}
    				else{
    					FileInputStream in = new FileInputStream(srcFiles[i]);
    					System.out.println(path + srcFiles[i].getName());
    					out.putNextEntry(new ZipEntry(path + srcFiles[i].getName()));
    					int len;
    					while((len=in.read(buf))>0){
    						out.write(buf,0,len);
    					}
    					out.closeEntry();
    					in.close();
    				}
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}

     

     

    在压缩的时候,针对文件夹进行判断,然后递归压缩文件。

     

     

     

     

     

     

    然后是解压:

     

    /**
    	 * 解压到指定目录
    	 * @param zipPath
    	 * @param descDir
    	 * @author isea533
    	 */
    	public static void unZipFiles(String zipPath,String descDir)throws IOException{
    		unZipFiles(new File(zipPath), descDir);
    	}
    	/**
    	 * 解压文件到指定目录
    	 * @param zipFile
    	 * @param descDir
    	 * @author isea533
    	 */
    	@SuppressWarnings("rawtypes")
    	public static void unZipFiles(File zipFile,String descDir)throws IOException{
    		File pathFile = new File(descDir);
    		if(!pathFile.exists()){
    			pathFile.mkdirs();
    		}
    		ZipFile zip = new ZipFile(zipFile);
    		for(Enumeration entries = zip.entries();entries.hasMoreElements();){
    			ZipEntry entry = (ZipEntry)entries.nextElement();
    			String zipEntryName = entry.getName();
    			InputStream in = zip.getInputStream(entry);
    			String outPath = (descDir+zipEntryName).replaceAll("\\\\", "/");;
    			//判断路径是否存在,不存在则创建文件路径
    			File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));
    			if(!file.exists()){
    				file.mkdirs();
    			}
    			//判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压
    			if(new File(outPath).isDirectory()){
    				continue;
    			}
    			//输出文件路径信息
    			System.out.println(outPath);
    			
    			OutputStream out = new FileOutputStream(outPath);
    			byte[] buf1 = new byte[1024];
    			int len;
    			while((len=in.read(buf1))>0){
    				out.write(buf1,0,len);
    			}
    			in.close();
    			out.close();
    			}
    		System.out.println("******************解压完毕********************");
    	}


    解压的时候,针对文件夹判断创建不存在的文件夹,对文件夹只创建,不进行解压..因为解压是针对文件的,不是文件夹,文件夹需要自己创建。

     

     

     

     

    测试方法:

     

    public static void main(String[] args) throws IOException {
    		/**
    		 * 压缩文件
    		 */
    		File[] files = new File[]{new File("d:/English"),new File("d:/发放数据.xls"),new File("d:/中文名称.xls")};
    		File zip = new File("d:/压缩.zip");
    		ZipFiles(zip,"abc",files);
    		
    		/**
    		 * 解压文件
    		 */
    		File zipFile = new File("d:/压缩.zip");
    		String path = "d:/zipfile/";
    		unZipFiles(zipFile, path);
    	}


    测试方法并没有对异常做任何处理,这是不对的,请不要模仿。

     

    输出结果:

     

    abc/English/templete.xls
    abc/English/中文/csdn/isea/533/abc/templete.xls
    abc/English/中文/csdn/isea/533/abc/zipfile2/templete.xls
    abc/English/中文/csdn/isea/533/abc/zipfile2/zipfile/abc/templete.xls
    abc/English/中文/csdn/isea/533/abc/zipfile2/zipfile/abc/zipfile2/templete.xls
    abc/English/中文/csdn/isea/533/abc/zipfile2/zipfile/abc/zipfile2/领卡清单.xls
    abc/English/中文/csdn/isea/533/abc/zipfile2/领卡清单.xls
    abc/English/中文/csdn/isea/templete.xls
    abc/English/中文/csdn/isea/领卡清单.xls
    abc/English/中文/csdn/templete.xls
    abc/English/领卡清单.xls
    abc/发放数据.xls
    abc/中文名称.xls
    *****************压缩完毕*******************
    d:/zipfile/abc/中文名称.xls
    d:/zipfile/abc/发放数据.xls
    d:/zipfile/abc/English/领卡清单.xls
    d:/zipfile/abc/English/中文/csdn/templete.xls
    d:/zipfile/abc/English/中文/csdn/isea/领卡清单.xls
    d:/zipfile/abc/English/中文/csdn/isea/templete.xls
    d:/zipfile/abc/English/中文/csdn/isea/533/abc/templete.xls
    d:/zipfile/abc/English/templete.xls
    d:/zipfile/abc/English/中文/csdn/isea/533/abc/zipfile2/templete.xls
    d:/zipfile/abc/English/中文/csdn/isea/533/abc/zipfile2/zipfile/abc/templete.xls
    d:/zipfile/abc/English/中文/csdn/isea/533/abc/zipfile2/zipfile/abc/zipfile2/templete.xls
    d:/zipfile/abc/English/中文/csdn/isea/533/abc/zipfile2/zipfile/abc/zipfile2/领卡清单.xls
    d:/zipfile/abc/English/中文/csdn/isea/533/abc/zipfile2/领卡清单.xls
    ******************解压完毕********************

     

     


     

    展开全文
  • 摘要:Java源码,文件操作,压缩文件 JavaZip压缩多个文件,一个Java文件操作小实例,用ZIP同进压缩多个文件,实际是打开文件读取,然后再利用ZipEntry实例化待压缩的条目列表,将ZIP条目列表写入输出流,从源文件...
  • 主要介绍了java实现一次性压缩多个文件zip中的方法,涉及java针对文件批量压缩相关的文件判断、遍历、压缩等操作技巧,需要的朋友可以参考下
  • 本篇文章主要介绍了Java解压缩zip - 解压缩多个文件或文件夹实例,非常具有实用价值,有需要的可以了解一下。
  • JavaJava实现zip压缩多个文件下载

    千次阅读 2017-04-10 10:20:50
    为了更好的演示,首先创建一个文件实体FileBean,包含了文件路径和文件名称: package com.javaweb.entity; import java.io.Serializable; /** * 文件实体类*/ public class FileBean implements ...

    为了更好的演示,首先创建一个文件实体FileBean,包含了文件路径和文件名称:

    复制代码
    package com.javaweb.entity;
    
    import java.io.Serializable;
    /**
     * 文件实体类*/
    public class FileBean implements Serializable{
        
        private static final long serialVersionUID = -5452801884470115159L;
        
        private Integer fileId;//主键
        
        private String filePath;//文件保存路径
        
        private String fileName;//文件保存名称
        
        public FileBean(){
            
        }
           
        //Setters and Getters ...
    }    
    复制代码

    接下来,在控制层的方法里(示例为Spring MVC)进行读入多个文件List<FileBean>,压缩成myfile.zip输出到浏览器的客户端:

    复制代码
        /**
         * 打包压缩下载文件
         */
        @RequestMapping(value = "/downLoadZipFile")
        public void downLoadZipFile(List<FileBean> fileList, HttpServletResponse response) throws IOException{
            String zipName = "myfile.zip";
            response.setContentType("APPLICATION/OCTET-STREAM");  
            response.setHeader("Content-Disposition","attachment; filename="+zipName);
            ZipOutputStream out = new ZipOutputStream(response.getOutputStream());
            try {
                for(Iterator<FileBean> it = fileList.iterator();it.hasNext();){
                    FileBean file = it.next();
                    ZipUtils.zipFile(file.getFilePath()+file.getFileName(), out);
                    response.flushBuffer();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                out.close();
            }
        }
    复制代码

    最后,附上ZipUtils压缩文件的工具类,这样便实现了多文件的压缩下载功能:

    复制代码
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
    /**
    * 压缩文件工具类
    */
    public class ZipUtils { public static void doCompress(String srcFile, String zipFile) throws Exception { doCompress(new File(srcFile), new File(zipFile)); } /** * 文件压缩 * @param srcFile 目录或者单个文件 * @param destFile 压缩后的ZIP文件 */ public static void doCompress(File srcFile, File destFile) throws Exception { ZipOutputStream out = new ZipOutputStream(new FileOutputStream(destFile)); if(srcFile.isDirectory()){ File[] files = srcFile.listFiles(); for(File file : files){ doCompress(file, out); } }else { doCompress(srcFile, out); } } public static void doCompress(String pathname, ZipOutputStream out) throws IOException{ doCompress(new File(pathname), out); } public static void doCompress(File file, ZipOutputStream out) throws IOException{ if( file.exists() ){ byte[] buffer = new byte[1024]; FileInputStream fis = new FileInputStream(file); out.putNextEntry(new ZipEntry(file.getName())); int len = 0 ; // 读取文件的内容,打包到zip文件 while ((len = fis.read(buffer)) > 0) { out.write(buffer, 0, len); } out.flush(); out.closeEntry(); fis.close(); } } }
    复制代码

     

    普通单个文件的下载方法:

    复制代码
        @RequestMapping(value = "/downloadFile")
        @ResponseBody
        public void downloadFile (HttpServletResponse response) {
    OutputStream os = null;
    try {
           os = response.getOutputStream();
           File file = new File("D:/javaweb/demo.txt");
           // Spring工具获取项目resources里的文件
           File file2 = ResourceUtils.getFile("classpath:shell/sinit.sh");
    if(!file.exists()){
              return;
           }
    response.reset(); response.setHeader("Content-Disposition", "attachment;filename=demo.txt"); response.setContentType("application/octet-stream; charset=utf-8"); os.write(FileUtils.readFileToByteArray(file)); } catch (Exception e) { e.printStackTrace(); }finally{ IOUtils.closeQuietly(os); } }
    复制代码

    另外一种下载方法ResponseEntity<byte[]>

    复制代码
        /**
         * Spring下载文件
         * @param request
         * @throws IOException 
         */
        @RequestMapping(value="/download")
        public ResponseEntity<byte[]> download(HttpServletRequest request) throws IOException{
         // 获取项目webapp目录路径下的文件 String path
    = request.getSession().getServletContext().getRealPath("/"); File file = new File(path+"/soft/javaweb.zip"); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDispositionFormData("attachment", "javaweb.zip"); return new ResponseEntity<byte[]>(org.apache.commons.io.FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED); }
      
    <a target="_blank" href="/download">点击下载</a>
    复制代码
    展开全文
  • 很简单的代码,很轻松的实现将多个文件压缩成一个包
  • JavaZip压缩多个文件实例源码.rar
  • java多个文件压缩zip文件

    千次阅读 2018-08-15 14:14:05
     文件压缩 */ private static void ZipFiles(java.io.File[] srcfile, java.io.File zipfile) { byte[] buf=new byte[1024]; ZipOutputStream out=null; try { out=new ZipOutputStream(new Fi...
    /**
     文件压缩
    */
    private static void ZipFiles(java.io.File[] srcfile, java.io.File zipfile) {
        byte[] buf=new byte[1024];
        ZipOutputStream out=null;
        try {
            out=new ZipOutputStream(new FileOutputStream(
                    zipfile));
            for (int i=0; i < srcfile.length; i++) {
                FileInputStream in=new FileInputStream(srcfile[i]);
                out.putNextEntry(new ZipEntry(srcfile[i].getName()));
                int len;
                while ((len=in.read(buf)) > 0) {
                    out.write(buf, 0, len);
                }
                out.closeEntry();
                in.close();
            }
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                out.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

     

    private void test(String zipName){

    File srcfile[]=new File[5];//数量可以通过本身的业务逻辑获取
    
    for (int i=0;  i < 5; i++) { //这里是在模拟添加文件  修改为自己要压缩的文件
        srcfile[i]=new File("file"+i);
    }
    
    String zipname=zipName + ".zip";
    File zip=new File(zipname);// 压缩文件
    if (zip.exists()) {
        zip.createNewFile();
    }
    ZipFiles(srcfile, zip);

    }

    我这边用到的是下载excel,因为数据量太大,弄的多线程生成excel,每个excel中有5000条数据,全部生成完成后将这些excel打包成压缩文件提供前端下载压缩文件。

     

    展开全文
  • 压缩多个文件成一个zip,并把原始的各个文件删除 实现: 传压缩包文件名(全路径)、需要压缩的一个或多个文件名(全路径)和是否删除原始文件标志(可选是否删除) 话不多说,放码出来。。。 压缩类: package...
  • 主要介绍了java压缩多个文件并且返回流示例,返回压缩流主是为了在程序里再做其它操作,需要的朋友可以参考下
  • java多个文件压缩打包成zip下载

    万次阅读 2018-12-21 14:53:53
    java多个文件压缩打包成zip下载 如果实现批量操作一些文件,使之压缩打包成zip下载? 具体实现步骤如下: 设置下载文件名编码 创建zip输出流ZipOutputStream 将需要下载的文件流循环写入ZipOutputStream 关闭各个流...
  • java 压缩/解压 zip 多个文件和文件夹

    千次阅读 2018-03-12 09:58:32
    参考了几篇文章,基本都是压缩单个文件或者一文件夹,不能混合压缩。 找了一不需要额外jar包的代码上改的。(参考文章) 不需要额外jar包。 压缩方法: import java.io.File; import java.io.FileInputStream; ...
  • 一下代码实现的是将多个文件进行压缩,采用的是边压缩边下载的方式 /** * 压缩文件 * @param exportFilePathList * @param response */ public static void downloadPictureZip(List&lt;String&...
  • 1.需要引入包: import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;...import java.util.ArrayList;...import java.util.zip.Zip...
  • java 文件zip压缩,单个文件以及多个文件,有需要的请下载。
  • 学习Java压缩zip文件:压缩单个文件和多个文件,不包含文件夹;怎样用Java将文件追加到zip文件中。测试类:/** * @FileName:ZipTest.java * @Description: TODO * @Copyright: All rights Reserved, Designed By ...
  • Java Zip算法压缩多个文件的例子,具体的实现原理是:先打开文件并读取,然后利用ZipEntry实例化待压缩的条目列表,将ZIP条目列表写入输出流,从源文件得到文件输入流,写入缓冲数据等。相关代码:  ...
  • import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io....import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import org.springframe
  • java多文件压缩zip文件并实现下载

    热门讨论 2012-10-25 19:40:27
    本例是把多个文件压缩成一个zip文件,然后下载到本地。 项目完整,下载解压即可运行。
  • Java调用Zip类批量压缩多个文件,此前有一个是压缩单个文件,也可参考,相关代码中可找到此源码。  public class ZipDemo extends JFrame{  JFileChooser fileChooser; //文件选择器  JList fileList; //待...
  • java多文件压缩ZIP

    2019-08-01 13:56:43
    * 多文件压缩为一个文件 * * @param srcFiles * @param zipFile */ public static void zipFiles(File[] srcFiles, File zipFile) { // 判断压缩后的文件存在不,不存在则创建 if (!zipFile.exists...
  • ZIP是一种很常见的压缩形式,在java中要实现ZIP压缩主要用到的是java.util.zip包里面的类。主要有ZipFile、 ZipOutputStream、ZipInputStream和ZipEntry。ZipOutputStream是用来压缩文件 的,ZipInputStream和...
  • 参考文章: http://www.cnblogs.com/yzuzhang/p/4763606.html为了更好的演示,首先创建一个文件实体FileBean,包含了文件路径和文件名称:package com.javaweb.entity; import java.io.Serializable; /** * 文件...
  • java压缩多个文件

    千次阅读 2018-03-29 15:58:16
    /** * 功能:压缩多个文件成一个zip文件 * @param srcfile:源文件列表 * @param zipfile:压缩后的文件 */ public static void zipFiles(File[] srcfile,File zipfile){ byte[] buf=new byte[1024];...
  • Java压缩/解压缩zip

    2012-09-09 21:14:57
    使用Java核心API实现单文件/多文件/整个目录的压缩/解压缩功能,由于自带API(1.6)不支持指定编码方式,因此中文会出现乱码(1.7貌似已经支持指定编码方式),所以还写了一基于ant包的压缩/解压缩代码。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,813
精华内容 24,325
关键字:

java压缩多个文件zip

java 订阅