精华内容
下载资源
问答
  • java zip压缩多个文件

    2013-02-20 20:17:21
    Java代码 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.File...
    Java代码 复制代码 收藏代码
    1. import java.io.BufferedInputStream;
    2. import java.io.BufferedOutputStream;
    3. import java.io.BufferedReader;
    4. import java.io.File;
    5. import java.io.FileInputStream;
    6. import java.io.FileOutputStream;
    7. import java.io.FileReader;
    8. import java.io.IOException;
    9. import java.util.Enumeration;
    10. import java.util.zip.Adler32;
    11. import java.util.zip.CheckedInputStream;
    12. import java.util.zip.CheckedOutputStream;
    13. import java.util.zip.ZipEntry;
    14. import java.util.zip.ZipFile;
    15. import java.util.zip.ZipInputStream;
    16. import java.util.zip.ZipOutputStream;
    17. import com.lifz.chapters18.util.ConstantUtil;
    18. public class ZipCompress {
    19. public static void main(String[] args) throws IOException {
    20. writeIn() ;
    21. readZip();
    22. }
    23. private static void writeIn() throws IOException {
    24. FileOutputStream fos = new FileOutputStream("c:/testZip.zip");
    25. CheckedOutputStream cos = new CheckedOutputStream(fos, new Adler32());
    26. ZipOutputStream zos = new ZipOutputStream(cos);
    27. BufferedOutputStream bos = new BufferedOutputStream(zos);
    28. zos.setComment("test zip ");
    29. String[] fileArray = { ConstantUtil.file, ConstantUtil.secondFile };
    30. String[] fileA = { "java.txt", "java2.txt" };
    31. for (int i = 0; i < fileArray.length; i++) {
    32. zos.putNextEntry(new ZipEntry(fileA[i]));
    33. BufferedReader br = new BufferedReader(new FileReader(new File(
    34. fileArray[i])));
    35. int c;
    36. while ((c = br.read()) != -1) {
    37. bos.write(c);
    38. }
    39. br.close();
    40. bos.flush();
    41. }
    42. bos.close();
    43. }
    44. private static void readZip() throws IOException {
    45. FileInputStream fis = new FileInputStream("c:/testZip.zip");
    46. CheckedInputStream cis = new CheckedInputStream(fis, new Adler32());
    47. ZipInputStream zis = new ZipInputStream(cis);
    48. BufferedInputStream bis = new BufferedInputStream(zis);
    49. ZipEntry ze;
    50. while((ze = zis.getNextEntry())!=null){
    51. System.out.println("reading file"+ze);
    52. int x;
    53. while((x=bis.read())!=-1){
    54. System.out.println(x);
    55. }
    56. }
    57. System.out.println("checksum"+cis.getChecksum().getValue());
    58. bis.close();
    59. Enumeration e =new ZipFile("c:/testZip.zip").entries();
    60. while(e.hasMoreElements()){
    61. ZipEntry ze2 = (ZipEntry) e.nextElement();
    62. System.out.println("file"+ze2);
    63. }
    64. }
    65. }  
    展开全文
  • 本文实例讲述了java实现一次性压缩多个文件zip中的方法。分享给大家供大家参考,具体如下:1.需要引入包:import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io....

    本文实例讲述了java实现一次性压缩多个文件到zip中的方法。分享给大家供大家参考,具体如下:

    1.需要引入包:

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.util.ArrayList;

    import java.util.List;

    import java.util.zip.ZipEntry;

    import java.util.zip.ZipOutputStream;

    import org.springframework.util.StringUtils;

    2.代码

    /**

    * @Title: compress

    * @Description: TODO

    * @param filePaths 需要压缩的文件地址列表(绝对路径)

    * @param zipFilePath 需要压缩到哪个zip文件(无需创建这样一个zip,只需要指定一个全路径)

    * @param keepDirStructure 压缩后目录是否保持原目录结构

    * @throws IOException

    * @return int 压缩成功的文件个数

    */

    public static int compress(List filePaths, String zipFilePath,Boolean keepDirStructure) throws IOException{

    byte[] buf = new byte[1024];

    File zipFile = new File(zipFilePath);

    //zip文件不存在,则创建文件,用于压缩

    if(!zipFile.exists())

    zipFile.createNewFile();

    int fileCount = 0;//记录压缩了几个文件?

    try {

    ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile));

    for(int i = 0; i < filePaths.size(); i++){

    String relativePath = filePaths.get(i);

    if(StringUtils.isEmpty(relativePath)){

    continue;

    }

    File sourceFile = new File(relativePath);//绝对路径找到file

    if(sourceFile == null || !sourceFile.exists()){

    continue;

    }

    FileInputStream fis = new FileInputStream(sourceFile);

    if(keepDirStructure!=null && keepDirStructure){

    //保持目录结构

    zos.putNextEntry(new ZipEntry(relativePath));

    }else{

    //直接放到压缩包的根目录

    zos.putNextEntry(new ZipEntry(sourceFile.getName()));

    }

    //System.out.println("压缩当前文件:"+sourceFile.getName());

    int len;

    while((len = fis.read(buf)) > 0){

    zos.write(buf, 0, len);

    }

    zos.closeEntry();

    fis.close();

    fileCount++;

    }

    zos.close();

    //System.out.println("压缩完成");

    } catch (Exception e) {

    e.printStackTrace();

    }

    return fileCount;

    }

    3.测试

    public static void main(String[] args) throws IOException {

    List sourceFilePaths = new ArrayList();

    sourceFilePaths.add("d:/test/C08065.jpg");

    sourceFilePaths.add("d:/test/新建文件夹/C08984.jpg");

    sourceFilePaths.add("d:/test/找不到我.jpg");//试一个找不到的文件

    //指定打包到哪个zip(绝对路径)

    String zipTempFilePath = "D:/test/test.zip";

    //调用压缩

    int s = compress(sourceFilePaths, zipTempFilePath,false);

    System.out.println("成功压缩"+s+"个文件");

    }

    希望本文所述对大家java程序设计有所帮助。

    展开全文
  • 摘要:Java源码,文件操作,压缩文件 JavaZip压缩多个文件,一个Java文件操作小实例,用ZIP同进压缩多个文件,实际是打开文件读取,然后再利用ZipEntry实例化待压缩的条目列表,将ZIP条目列表写入输出流,从源文件...
  • 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
    ******************解压完毕********************

     

     


     

    展开全文
  • importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io....importjava.util.zip.ZipEntry;importjava.util.zip.ZipOutputStream;public classZipUtils {private...

    importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.util.zip.ZipEntry;importjava.util.zip.ZipOutputStream;public classZipUtils {privateZipUtils(){

    }public static void doCompress(String srcFile, String zipFile) throwsIOException {

    doCompress(new File(srcFile), newFile(zipFile));

    }/*** 文件压缩

    *@paramsrcFile 目录或者单个文件

    *@paramzipFile 压缩后的ZIP文件*/

    public static void doCompress(File srcFile, File zipFile) throwsIOException {

    ZipOutputStream out= null;try{

    out= new ZipOutputStream(newFileOutputStream(zipFile));

    doCompress(srcFile, out);

    }catch(Exception e) {throwe;

    }finally{

    out.close();//记得关闭资源

    }

    }public static void doCompress(String filelName, ZipOutputStream out) throwsIOException{

    doCompress(newFile(filelName), out);

    }public static void doCompress(File file, ZipOutputStream out) throwsIOException{

    doCompress(file, out,"");

    }public static void doCompress(File inFile, ZipOutputStream out, String dir) throwsIOException {if( inFile.isDirectory() ) {

    File[] files=inFile.listFiles();if (files!=null && files.length>0) {for(File file : files) {

    String name=inFile.getName();if (!"".equals(dir)) {

    name= dir + "/" +name;

    }

    ZipUtils.doCompress(file, out, name);

    }

    }

    }else{

    ZipUtils.doZip(inFile, out, dir);

    }

    }public static void doZip(File inFile, ZipOutputStream out, String dir) throwsIOException {

    String entryName= null;if (!"".equals(dir)) {

    entryName= dir + "/" +inFile.getName();

    }else{

    entryName=inFile.getName();

    }

    ZipEntry entry= newZipEntry(entryName);

    out.putNextEntry(entry);int len = 0;byte[] buffer = new byte[1024];

    FileInputStream fis= newFileInputStream(inFile);while ((len = fis.read(buffer)) > 0) {

    out.write(buffer,0, len);

    out.flush();

    }

    out.closeEntry();

    fis.close();

    }public static void main(String[] args) throwsIOException {

    doCompress("D:/java/", "D:/java.zip");

    }

    }

    展开全文
  • 压缩多个文件成一个zip,并把原始的各个文件删除 实现: 传压缩包文件名(全路径)、需要压缩的一个或多个文件名(全路径)和是否删除原始文件标志(可选是否删除) 话不多说,放码出来。。。 压缩类: package...
  • 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 ...
  • Java Zip算法压缩多个文件的例子,具体的实现原理是:先打开文件并读取,然后利用ZipEntry实例化待压缩的条目列表,将ZIP条目列表写入输出流,从源文件得到文件输入流,写入缓冲数据等。相关代码:  ...
  • java压缩zip - 多个文件(包括文件夹),具体如下:对多个文件和文件夹进行压缩,对复杂的文件目录进行解压。压缩方法使用的是可变参数,可以压缩1到多个文件..可以写数组的方式或者一个个写到参数列表里面...zip...
  • 上一版本Java笔记——Java ZIP压缩一个或多个文件java.util.zipoutputstream压缩会出现中文的文件名乱码的情况,且无法设置字符集,今天这个版本用org.apache.tools.zip.ZipOutputStream压缩,可以自定义字符集...
  • 本篇文章主要介绍了Java解压缩zip - 解压缩多个文件或文件夹实例,非常具有实用价值,有需要的可以了解一下。
  • 一下代码实现的是将多个文件进行压缩,采用的是边压缩边下载的方式/*** 压缩文件* @param exportFilePathList* @param response*/public static void downloadPictureZip(List exportFilePathList, ...
  • java压缩 GZIP进行简单压缩ZIP进行多文件保存package org.rui.io.compress;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.FileOutputStream...
  • 导包的时候一定导org.apache.tools.zip下的包,不要导JDK的zip包,JDK的包在文件名为中文的情况下,打包是会乱码的。在apache的包下,可以设置编码。直接看代码:import java.io.BufferedInputStream;import java.io...
  • java.util.zipoutputstream压缩会出现中文的文件名乱码的情况,且无法设置字符集,这版本用org.apache.tools.zip.ZipOutputStream压缩,可以自定义字符集,解决中文的文件名乱码问题。
  • 1.添加maven依赖org.apache.commonscommons-...开始测试import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutp...
  • 一下代码实现的是将多个文件进行压缩,采用的是边压缩边下载的方式 /** * 压缩文件 * @param exportFilePathList * @param response */ public static void downloadPictureZip(List&lt;String&...
  • /*** 多文件压缩** @author Administrator**/public class ZipCompress {public static void main(String args[]) {String[] filepaths = { "D:\\zip1.txt", "D:\\zip2.txt" };try {FileOutputStream f = new ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,178
精华内容 471
关键字:

javazip压缩多个文件

java 订阅