一、简述

zip用于压缩和解压文件。使用到的类有:ZipEntry  ZipOutputStream

二、具体实现代码

package com.joyplus.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream; /**
* @author
* 将文件中所有文件及文件夹压缩
* source: 文件源的路径
* dest: 压缩文件存放路径
*/
public class zipFiletest1 { //获取文件源中的所有文件
private List<File> getSourceAllFiles(String from){
List<File> fileList=new ArrayList<>();
File fromfile=new File(from);
File[] fileArr=fromfile.listFiles();
for (File file : fileArr) {
if(file.isFile()){
fileList.add(file);
}else{
//利用递归之法,获取路径中子路径中的所有文件
fileList.addAll(getSourceAllFiles(file.getPath()));
}
}
return fileList;
} //得到文件在文件夹中的相对路径 保持原有结构 (也可以根据需求自己创建新的结构)
private String getRelName(String from,File f){
String name=null;
name=f.getAbsolutePath().replace(from+"\\", "");
name=name.replace("\\", "/");
System.out.println("文件相对路径是:"+name);
return name;
} //创建一个压缩文件,并存放到新的路径中
public void createZipFile(String from,String dest){
List<File> fileList=getSourceAllFiles(from);
ZipOutputStream zout=null; //生成Zip输出流
try {
zout=new ZipOutputStream(new FileOutputStream(new File(dest)));
//将每个文件放入Zip流中
for (File f : fileList) {
InputStream is=new FileInputStream(f);
String name=getRelName(from, f); //获取文件相对路径 保持文件原有结构
ZipEntry en=new ZipEntry(new File(from).getName()+"/"+name);
          //
ZipEntry ens=new ZipEntry(f.getName()); //这样只是把单独的文件压缩,不再有之前的结构
en.setSize(f.length());
zout.putNextEntry(en);
zout.setComment("test");
//读取文件中的内容
int len=;
byte[] buffer=new byte[];
while((len=is.read(buffer))!=-){
zout.write(buffer,,len);
}
zout.flush();
is.close();
}
zout.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(zout!=null){
try {
zout.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
} public static void main(String[] args) {
zipFiletest1 test=new zipFiletest1();
test.createZipFile("D:\\EDI_MULIT_DOWNLOAD\\5fd0998a07c84d9d924076f64fb726a7", "D:\\sumZip\\co.zip");
} }

注意:ZipEntry 与ZipOutputStream 不是用的java自带的类,import org.apache.tools.zip.*。java的java.util.zip包里也有这两个类,不过对中文的支持不佳,文件的注释与生成的文件名都不能用中文,否则乱码,不过对文件的内容不影响。

java.util.zip压缩打包文件总结一:压缩文件及文件下面的文件夹的更多相关文章

  1. java.util.zip压缩打包文件总结二: ZIP解压技术

    一.简述 解压技术和压缩技术正好相反,解压技术要用到的类:由ZipInputStream通过read方法对数据解压,同时需要通过CheckedInputStream设置冗余校验码,如: Checked ...

  2. [Java 基础] 使用java.util.zip包压缩和解压缩文件

    reference :  http://www.open-open.com/lib/view/open1381641653833.html Java API中的import java.util.zip ...

  3. java.util.zip.ZipOutputStream压缩无乱码(原创)

    package io; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.FileI ...

  4. java.util.zip.Deflater 压缩 inflater解压 实例

    原文:java压缩解压缩类实例[转] package com.example.helloworld; import java.io.ByteArrayOutputStream; import java ...

  5. java.util.zip

    使用java自带的类 java.util.zip进行文件/目录的压缩的话,有一点不足,不支持中文的名件/目录命名,如果有中文名,那么打包就会失败.本人经过一段时间的摸索和实践,发现在一般的Ant.ja ...

  6. 重签名提示:无法对 jar 进行签名: java.util.zip.ZipException

    使用jarsigner对APK重签名,提示:jarsigner: 无法对 jar 进行签名: java.util.zip.ZipException: invalid entry compressed ...

  7. Poi读取Excle报错 java.util.zip.ZipException: invalid stored block lengths

    一:Poi读取Excle报错  java.util.zip.ZipException: invalid stored block lengths 系统中需要导出excle签收单,excle模板是预设好 ...

  8. java.util.zip.ZipException:ZIP file must have at least one entry

    1.错误描述 java.util.zip.ZipException:ZIP file must have at least one entry 2.错误原因 由于在导出文件时,要将导出的文件压缩到压缩 ...

  9. [java bug记录] java.util.zip.ZipException: invalid code lengths set

    1. 描述:将代码迁移到maven工程,其中用ZipInputStream读取/src/main/resources下的zip文件时报错:“java.util.zip.ZipException: in ...

随机推荐

  1. 【转】Android4.4(MT8685)源码蓝牙解析--BLE搜索

    原文网址:http://blog.csdn.net/u013467735/article/details/41962075 BLE:全称为Bluetooth Low Energy.蓝牙规范4.0最重要 ...

  2. 迷宫城堡--HDOJ 1269(Tarjan)

    迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  3. Ext.form.FormPanel定义的参数说明

    1.formId : String (可选的)FORM标签的id(默认是自动生成的). 2.labelWidth : Number 标签的宽度.该属性级联于子容器. 3. itemCls : Stri ...

  4. ElasticSearch elasticsearch-servicewrapper 在linux上的安装部署全程记录

    原文地址:http://www.cnblogs.com/tianjixiaoying/p/4316011.html 由于项目需求,需要在linux平台搭建一套ES服务.在搭建过程中,遇到各种各样的问题 ...

  5. Hdu 4312-Meeting point-2 切比雪夫距离,曼哈顿距离,前缀和

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=4312 Meeting point-2 Time Limit: 2000/1000 MS (Java/Ot ...

  6. yum puppet 并整合控制台

    上篇说了下在ubuntu12.04上安装puppet,安装的版本为puppet2.7.11版本,今天尝试了下在CentOS6.4系统上安装puppet 3.1.1版本,本文参考chenshake的文章 ...

  7. Yii路径总结(转)

    如果是 // 就会默认去调 protected/views/layouts //代表 绝对路径 其实 就是 绝对和相对的关系 /代表相对路径,如module/user下的layout  用单斜杠的话默 ...

  8. ASP.NET【2】

    从上一节我们了解到ASP.NET是一种动态网页技术,在服务器端运行.Net代码,服务器端接收处理动态生成HTML代码,然后发送给浏览器,再由浏览器解析HTML代码将数据呈现给用户. 那么,下面我来介绍 ...

  9. []cp,转载]提示MyEclipse Trial Expired,如何手动获取MyEclipse 注册码!很牛!

    1.建立JAVA Project,随便命名,只要符合规则就行. 2.在刚刚建好的Project右击src,新建一个类,命名为MyEclipseGen,把.java里本来有的代码全部删掉,再把下面的代码 ...

  10. Java-struts2的问题 java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils

    缺commons-lang3-3.1.jar,添加之后就可以了