java.util.zip压缩打包文件总结一:压缩文件及文件下面的文件夹
一、简述
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压缩打包文件总结一:压缩文件及文件下面的文件夹的更多相关文章
- java.util.zip压缩打包文件总结二: ZIP解压技术
一.简述 解压技术和压缩技术正好相反,解压技术要用到的类:由ZipInputStream通过read方法对数据解压,同时需要通过CheckedInputStream设置冗余校验码,如: Checked ...
- [Java 基础] 使用java.util.zip包压缩和解压缩文件
reference : http://www.open-open.com/lib/view/open1381641653833.html Java API中的import java.util.zip ...
- java.util.zip.ZipOutputStream压缩无乱码(原创)
package io; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.FileI ...
- java.util.zip.Deflater 压缩 inflater解压 实例
原文:java压缩解压缩类实例[转] package com.example.helloworld; import java.io.ByteArrayOutputStream; import java ...
- java.util.zip
使用java自带的类 java.util.zip进行文件/目录的压缩的话,有一点不足,不支持中文的名件/目录命名,如果有中文名,那么打包就会失败.本人经过一段时间的摸索和实践,发现在一般的Ant.ja ...
- 重签名提示:无法对 jar 进行签名: java.util.zip.ZipException
使用jarsigner对APK重签名,提示:jarsigner: 无法对 jar 进行签名: java.util.zip.ZipException: invalid entry compressed ...
- Poi读取Excle报错 java.util.zip.ZipException: invalid stored block lengths
一:Poi读取Excle报错 java.util.zip.ZipException: invalid stored block lengths 系统中需要导出excle签收单,excle模板是预设好 ...
- 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.错误原因 由于在导出文件时,要将导出的文件压缩到压缩 ...
- [java bug记录] java.util.zip.ZipException: invalid code lengths set
1. 描述:将代码迁移到maven工程,其中用ZipInputStream读取/src/main/resources下的zip文件时报错:“java.util.zip.ZipException: in ...
随机推荐
- Sharepoint 2010 之 WebPart
转:http://blog.csdn.net/bestbadgod/article/details/6895542 Sharepoint系列的博客,都是我个人自学过程中的点滴的积累,毕竟没做过C#及A ...
- Centos6.4 mysql安装与配置
安装命令: yum install mysql #安装客户端 yum install mysql-server #安装服务器 yum install mysql-devel #安装开发库 安装完成后, ...
- [PeterDLax著泛函分析习题参考解答]第5章 赋范线性空间
1. (a) 证明 (6) 定义了范数. (b) 证明它们在 (5) 式意义下是等价的. 证明: $$\bex |(z,u)|'\leq |(z,u)|\leq 2|(z,u)|',\quad |(z ...
- php--常用的时间处理函数
天地四方曰宇,往古来今曰宙 时间是世界的重要组成部分,不论花开花落,还是云卷云舒都有它的影子. 但它源起何处?又将去向何方?没人知道答案,也不需要答案,我们需要的只是一个相对的起点来标识时间,现今世界 ...
- python爬虫学习(1)__抓取煎蛋图片
#coding=utf-8 #python_demo 爬取煎蛋妹子图在本地文件夹 import requests import threading import time import os from ...
- CSDN被黑几年后 我决定继续blogs
CSDN被黑几年后 我决定继续blogs 可惜了我那么多年的文章,全没了 希望这个博客顺风顺水---2015-12-23
- Eclipse的安装以及与Tomcat的集成
1.下载indgo版本的Eclipse:http://www.eclipse.org(64位:eclipse-jee-indigo-SR2-win32-x86_64.zip) 2.解压到D:\Prog ...
- Codeigniter数据库操作
//查询: $query = $this->db_query("SELECT * FROM table"); ================================ ...
- ios 利用Reveal来调试界面2--真机调试(步骤详解)
使用真机调试我们的App界面,如果你的真机是没有越狱的设备,那么使用Reveal来调试UI的步骤是最麻烦的.
- 通过rest接口获取自增id (twitter snowflake算法)
1. 算法介绍 参考 http://www.lanindex.com/twitter-snowflake%EF%BC%8C64%E4%BD%8D%E8%87%AA%E5%A2%9Eid%E7%AE% ...