java之压缩流(ZipOutputStream)
一、文件压缩,是很有必要的,我们在进行文件,传输过程中,很多时候都是,都是单个文件单个文件发送接收,但是当数据量特别大,或者文件数量比较多的时候,这个时候就可以考虑文件压缩。
二、优势:文件压缩过后,只需要进行一次文件的传输就可以了。减少频繁发送的问题。缺点:文件大小会变大,如果传输过程中断了,风险较大。
三、实现:
/**
* 提供给用户使用的基本压缩类
* @param srcPath
* @param outPath
* @throws IOException
*/
public static void compressFile(String srcPath, String outPath) throws IOException {
//读取源文件
File srcFile = new File(srcPath);
//判断输出路径是否正确
File outFile = new File(outPath);
//如果只是路劲加入对应的压缩名称
if (outFile.isDirectory()) {
//用"/"作文判断标准
if (outPath.endsWith(File.separator)) {
outPath += srcFile.getName().split("\\.")[] + ".zip";
} else {
outPath += File.separator + srcFile.getName().split("\\.")[] + ".zip";
}
}
//读取文件流
FileOutputStream fileOutputStream = new FileOutputStream(outPath);
ZipOutputStream zipOutputStream = new ZipOutputStream(fileOutputStream);
//压缩文件
compressFile(srcFile, srcFile.getName(),zipOutputStream);
//关闭流
zipOutputStream.close();
fileOutputStream.close();
} /**
* 迭代方式进行文件压缩
* @param file
* @param fileName
* @param outputStream
* @throws IOException
*/
private static void compressFile(File file, String fileName, final ZipOutputStream outputStream) throws IOException {
//如果是目录
if (file.isDirectory()) {
//创建文件夹
outputStream.putNextEntry(new ZipEntry(fileName+"/"));
//迭代判断,并且加入对应文件路径
File[] files = file.listFiles();
Iterator<File> iterator = Arrays.asList(files).iterator();
while (iterator.hasNext()) {
File f = iterator.next();
compressFile(f, fileName+"/"+f.getName(), outputStream);
}
} else {
//创建文件
outputStream.putNextEntry(new ZipEntry(fileName));
//读取文件并写出
FileInputStream fileInputStream = new FileInputStream(file);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
byte[] bytes = new byte[];
int n;
while ((n = bufferedInputStream.read(bytes)) != -) {
outputStream.write(bytes, , n);
}
//关闭流
fileInputStream.close();
bufferedInputStream.close();
}
}
四、测试:
public static void main(String[] args) throws IOException {
compressFile("D:\\srv", "D:\\");
}


五、效果还是可以,此方式根据需要修改!
java之压缩流(ZipOutputStream)的更多相关文章
- Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream)
Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我已经分享过很多的J ...
- [源码]ObjectIOStream 对象流 ByteArrayIOStream 数组流 内存流 ZipOutputStream 压缩流
1.对象流 import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File ...
- java压缩流
java压缩流是为了减少传输时的数据量,可以将文件压缩成ZIP.JAR.GZIP等文件格式.
- java文件压缩ZipOutPutStream
其实最好的书籍就是javaAPI 1.创建ZipOutPutStream流,利用BufferedOutputStream提个速. 2.新建zip方法,用来压缩文件,传参 3.zip方法利用putNex ...
- Java IO--压缩流
压缩流: 压缩流的实现: zipEntry: 在实例化ZipEntry的时候,要设置名称,此名称实际上就是压缩文件中的每一个元素的名称. ZipOutputStream: import java.io ...
- Java生成压缩文件(zip、rar 格式)
jar坐标: <dependency> <groupId>org.apache.ant</groupId> <artifactId>ant</ar ...
- 吴裕雄--天生自然JAVAIO操作学习笔记:压缩流与回退流
import java.io.File ; import java.io.FileInputStream ; import java.io.InputStream ; import java.util ...
- 面试必备:详解Java I/O流,掌握这些就可以说精通了?
@TOC Java IO概述 IO就是输入/输出.Java IO类库基于抽象基础类InputStream和OutputStream构建了一套I/O体系,主要解决从数据源读入数据和将数据写入到目的地问题 ...
- java ZIP压缩文件
问题描述: 使用java ZIP压缩文件和目录 问题解决: (1)单个文件压缩 注: 以上是实现单个文件写入压缩包的代码,注意其中主要是在ZipOutStream流对象中创建Z ...
随机推荐
- JDK 1.8 ConcurrentHashMap 源码剖析
转载两篇不错的文章: 第一篇: 前言 HashMap是我们平时开发过程中用的比较多的集合,但它是非线程安全的,在涉及到多线程并发的情况,进行put操作有可能会引起死循环,导致CPU利用率接近100%. ...
- [笔记] SQL性能优化 - 常用语句(一)
第一步 DBCC DROPCLEANBUFFERS 清除缓冲区 DBCC FREEPROCCACHE 删除计划高速缓存中的元素 从缓冲池中删除所有清除缓冲区.要求具有 sysadmin 固定服务器角色 ...
- Nginx 多进程连接请求/事件分发流程分析
Nginx使用多进程的方法进行任务处理,每个worker进程只有一个线程,单线程循环处理全部监听的事件.本文重点分析一下多进程间的负载均衡问题以及Nginx多进程事件处理流程,方便大家自己写程序的时候 ...
- zookeeper和Eureka对CAP理论的支持
著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性).A(可用性)和P(分区容错性).由于分区容错性在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡.在此Zookeeper保证 ...
- [转] VR-FORCES 介绍
转自:https://sanwen8.cn/p/1e6GQeK.html 今天给各位介绍的仿真平台是VR-Forces.VR-Forces是新加坡公司MAK的产品,前身是美国公司.在仿真平台领域里面, ...
- java线程中的interrupt,isInterrupt,interrupted方法
在java的线程Thread类中有三个方法,比较容易混淆,在这里解释一下 (1)interrupt:置线程的中断状态 (2)isInterrupt:线程是否中断 (3)interrupted:返回线程 ...
- 这些HTML、CSS知识点,面试和平时开发都需要 No5-No7(知识点:文字设置、设置背景、数据列表)
系列知识点汇总 这些HTML.CSS知识点,面试和平时开发都需要 No1-No4(知识点:HTML.CSS.盒子模型.内容布局) 这些HTML.CSS知识点,面试和平时开发都需要 No5-No7(知识 ...
- bzoj1054: [HAOI2008]移动玩具 状压+爆搜即可
题意:在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动次数将初的玩具状态 ...
- hdu1850nim博弈输出问题
和之前一道题是类似的,输出第一步走的方法,遍历数组找到a[i]^s<a[i]的那个数a[i]-a[i]^s就是要取的数 #include<map> #include<set&g ...
- EPANET头文件解读系列5——TYPES.H
/************************************************************************ ...