/* @description:压缩文件操作
* @param filePath 要压缩的文件路径
* @param descDir 压缩文件保存的路径 d:\\aaa.zip
*/
public static void zipFiles(String filePath, String descDir)
{
ZipOutputStream zos = null;
System.out.println("******************ZipOutputStream********************");
try
{
// 创建一个Zip输出流
zos = new ZipOutputStream(new FileOutputStream(descDir));
// 启动压缩
startZip(zos, "", filePath); System.out.println("******************压缩完毕********************");
}
catch (IOException e)
{
// 压缩失败,则删除创建的文件
File zipFile = new File(descDir); if (zipFile.exists())
{
zipFile.delete();
}
System.out.println("******************压缩失败********************"); e.printStackTrace();
}
finally
{
try
{
if (zos != null)
{
zos.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
} /*
*
* @description:对目录中所有文件递归遍历进行压缩
* @param zos ZIP压缩输出流
* @param oppositePath 在zip文件中的相对路径
* @param directory 要压缩的文件的路径
* @throws IOException
*/
private static void startZip(ZipOutputStream zos, String oppositePath,
String directory) throws IOException
{
File file = new File(directory); if (file.isDirectory())
{
// 如果是压缩目录
File[] files = file.listFiles(); for (int i = ; i < files.length; i++)
{
File aFile = files[i]; if (aFile.isDirectory())
{
// 如果是目录,修改相对地址
String newOppositePath = oppositePath + aFile.getName() + "/";
// 压缩目录,这是关键,创建一个目录的条目时,需要在目录名后面加多一个"/"
ZipEntry entry = new ZipEntry(oppositePath + aFile.getName() + "/"); zos.putNextEntry(entry); zos.closeEntry();
// 进行递归调用
startZip(zos, newOppositePath, aFile.getPath());
}
else
{
// 如果不是目录,则进行压缩
zipFile(zos, oppositePath, aFile);
}
}
}
else
{
// 如果是压缩文件,直接调用压缩方法进行压缩
zipFile(zos, oppositePath, file);
}
} /**
*
* @description:压缩单个文件到目录中
* @param zos zip输出流
* @param oppositePath 在zip文件中的相对路径
* @param file 要压缩的的文件
*/
private static void zipFile(ZipOutputStream zos, String oppositePath,File file)
{
// 创建一个Zip条目,每个Zip条目都是必须相对于根路径
InputStream is = null; try
{
ZipEntry entry = new ZipEntry(oppositePath + file.getName());
// 将条目保存到Zip压缩文件当中
zos.putNextEntry(entry);
// 从文件输入流当中读取数据,并将数据写到输出流当中.
is = new FileInputStream(file); int length = ; int bufferSize = ; byte[] buffer = new byte[bufferSize]; while ((length = is.read(buffer, , bufferSize)) >= )
{
zos.write(buffer, , length);
}
zos.closeEntry();
}
catch (IOException ex)
{
ex.printStackTrace();
}
finally
{
try
{
if (is != null)
{
is.close();
}
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
}

java压缩的更多相关文章

  1. java压缩指定目录下的所有文件和文件夹的代码

    将代码过程较好的代码段备份一下,下边资料是关于java压缩指定目录下的所有文件和文件夹的代码,希望对码农有帮助. String sourceDir="E:\test";int pa ...

  2. java压缩文件或文件夹并导出

    java压缩文件或文件夹并导出 tozipUtil: package com.zhl.push.Utils; import java.io.File; import java.io.FileInput ...

  3. java压缩流

    java压缩流是为了减少传输时的数据量,可以将文件压缩成ZIP.JAR.GZIP等文件格式.

  4. Java压缩/解压.zip、.tar.gz、.tar.bz2(支持中文)

    本文介绍Java压缩/解压.zip..tar.gz..tar.bz2的方式. 对于zip文件:使用java.util.zip.ZipEntry 和 java.util.zip.ZipFile,通过设置 ...

  5. java压缩 GZIP进行简单压缩,ZIP进行多文件保存

    java压缩  GZIP进行简单压缩,ZIP进行多文件保存 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlhbmdydWkxOTg4/font/5a6 ...

  6. Java压缩技术(二) ZIP压缩——Java原生实现

    原文:http://snowolf.iteye.com/blog/642298 去年整理了一篇ZLib算法Java实现(Java压缩技术(一) ZLib),一直惦记却没时间补充.今天得空,整理一下ZI ...

  7. Java压缩和解压缩文件工具

    Java压缩和解压缩文件工具 学习了: https://www.oschina.net/code/snippet_1021818_48130 http://blog.csdn.net/gaowen_h ...

  8. Java 压缩/ 解压 .Z 文件

    1.问题描述 公司项目有需要用 JAVA 解压 .z文件. .z 是 unix 系统常见的压缩文件. 2.源码 import com.chilkatsoft.CkUnixCompress; impor ...

  9. 原生java 压缩解压zip文件

    import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import ...

  10. Java 压缩字符串

    1.引言 最近在做项目中,平台提供一个http服务给其他系统调用,然后我接收到其他系统的json格式的报文后去解析,然后用拿到的数据去调用corba服务,我再把corba的返回值封装完成json字符串 ...

随机推荐

  1. Spring回调方法DisposableBean接口

    除了自定义的destroy-method.还可以实现DisposableBean接口,来回调bean销毁时候执行的方法,这个接口有一个destroy方法,生命周期是是destroy----bean销毁 ...

  2. VisualStudio基本使用(2)-使用VS2013来编译C语言程序

    切换到C语言程序所有目录,执行cl test.c

  3. 在windows7 上安装 Sublime Text 3 及其插件

    1.下载地址:http://www.sublimetext.com/3 请根据你的平台,选择适当的安装版本 安装完毕后,设定TAB键为4个空格( Preferences——>Setings-Us ...

  4. js DOM Element属性和方法整理

    节点操作,属性 1. childNodes.children 这两个属性获取到的子节点会根据浏览器的不同而不同的,所以一定要判断下nodeType是否为1. childNodes获取到的是NodeLi ...

  5. 大数据之sqoop

    一.安装: 1 解压然后把mysql的驱动放在$SQOOP_HOME/lib 目录中2. conf/sqoop-en.sh export HADOOP_COMMON_HOME=/home/hadoop ...

  6. 使用PHP的五个小技巧

    PHP的一些小技巧,比较基础,总结一下,老鸟换个姿势飘过去就是. 1. str_replace str_replace是非常常常常常用的php函数,用于字符串替换,经常看到某些php新人为了替换一批字 ...

  7. ASN.1编码

    来自几年前本人写的一篇博客 http://blog.csdn.net/newyf_cun/article/details/13016069 如下使用libtasn1分析asn1的编码规则. http: ...

  8. JAVA设计模式 之 策略模式

    一. 定义 设计模式定义了算法族,分别封装起来,让他们之间可以互相替代,此模式让算法的变化独立于使用算法的客户(该定义来自于Head First 设计模式). 二. 应用场景 当我们在应用程序中完成一 ...

  9. MySQL 8.0.0 版本发布,亮点都在这了!

    导读 MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司.目前MySQL被广泛地应用在Internet上的中小型网站中.由于其体积小.速度快.总体拥有成本低,尤其是开 ...

  10. Unity手游之路<二>Java版服务端使用protostuff简化protobuf开发

    http://blog.csdn.net/janeky/article/details/17151465 开发一款网络游戏,首先要考虑的是客户端服务端之间用何种编码格式进行通信.之前我们介绍了Unit ...