java编程笔记18 文件压缩与解压缩

在java中,主要是利用ZipEntry,ZipInputStream和ZipOutputStream来实现zip数据压缩方式的编程方法,

构造方法摘要
ZipEntry(String name)
          使用指定名称创建新的 ZIP 条目。
构造方法摘要
ZipInputStream(InputStream in)
          创建新的 ZIP 输入流。
构造方法摘要
ZipOutputStream(OutputStream out)
          创建新的 ZIP 输出流。

ZipInputStream的主要方法

ZipEntrygetNextEntry()
          读取下一个 ZIP 文件条目并将流定位到该条目数据的开始处。
 voidcloseEntry()
          关闭当前 ZIP 条目并定位流以读取下一个条目。

压缩测试程序:

package com.book.ch09.file;import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;public class CompressFile {public static void addFile(ZipOutputStream zipOutput, File file) throws IOException{System.out.println("正在添加文件:" + file.getAbsolutePath());// 每个压缩对象都为一个 ZipEntry 实例。ZipEntry zipEntry = new ZipEntry(file.getName());// 将这个实例放入压缩文件中zipOutput.putNextEntry(zipEntry);// 读取文件内容FileInputStream ins = new FileInputStream(file);byte[] tmp = new byte[1024];int len = 0;while((len = ins.read(tmp)) != -1){zipOutput.write(tmp, 0, len);}ins.close();// 关闭当前的 ZipEntry 实例zipOutput.closeEntry();}public static void main(String[] args) throws IOException{File sourceFolder = new File("D:\\常用软件");File targetFile = new File("D:\\zip_test.zip");// 使用 ZipOutputStream 创建压缩文件ZipOutputStream zipOutput = new ZipOutputStream(new FileOutputStream(targetFile));// 列出该文件夹下所有的文件File[] subFiles = sourceFolder.listFiles(new FileFilter(){public boolean accept(File pathname) {if(pathname.isFile())	return true;return false;}});System.out.println("\r\n文件压缩开始:" +sourceFolder.getAbsolutePath()+"\n\n");for(int i=0; i<subFiles.length; i++){addFile(zipOutput, subFiles[i]);}zipOutput.close();System.out.println("\r\n文件压缩完成:" + targetFile.getAbsolutePath());}}

运行结果:


文件压缩开始:D:\常用软件


正在添加文件:D:\常用软件\apache_2.2.4-win32-x86-no_ssl.zip
正在添加文件:D:\常用软件\CAJViewer7.0.zip
正在添加文件:D:\常用软件\CCleaner.rar
正在添加文件:D:\常用软件\CTeX_2.8.0.125.exe
正在添加文件:D:\常用软件\download
正在添加文件:D:\常用软件\DUBA2008_down_31_4306.exe
正在添加文件:D:\常用软件\DZH_INTERNET_V560w.exe
正在添加文件:D:\常用软件\EasyRecoveryPro-v6.20.rar
正在添加文件:D:\常用软件\FinalData-v2.01.rar
正在添加文件:D:\常用软件\FirefoxChinaEdition 2010.12.exe
正在添加文件:D:\常用软件\FirefoxChinaEdition-latest.exe
正在添加文件:D:\常用软件\fxalendar.exe
............

............


文件压缩完成:D:\zip_test.zip

解压缩:

package com.book.ch09.file;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;public class UncompressFile {static int count = 0;public static void extractFile(File path, ZipInputStream zipIns, ZipEntry zipEntry) throws IOException{File file = new File(path, zipEntry.getName());System.out.println("正在释放文件:" + file.getAbsolutePath());FileOutputStream ous = new FileOutputStream(file);byte[] tmp = new byte[1024];int len = 0;while((len = zipIns.read(tmp)) != -1){ous.write(tmp, 0, len);}ous.close();zipIns.closeEntry();count++;}public static void main(String[] args) throws IOException{File sourceZipFile = new File("c:\\zip_test.zip");File targetFolder = new File("C:\\zip_test");targetFolder.mkdir();ZipInputStream zipIns = new ZipInputStream(new FileInputStream(sourceZipFile));ZipEntry zipEntry = zipIns.getNextEntry();while(zipEntry != null){extractFile(targetFolder, zipIns, zipEntry);zipEntry = zipIns.getNextEntry();}zipIns.close();System.out.println("\r\n文件释放完成。" + count + " 个文件被释放。");}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

随机排列_图片视频特效一键生成,27 种特效可随机排列组合!

酷友们&#xff0c;大家好&#xff01;相信很多酷友喜欢刷抖音&#xff0c;抖音视频中有很多特效也很酷。其实这些特效称作故障艺术(Glitch Art)&#xff0c;就是利用事物形成的故障&#xff0c;进行艺术加工&#xff0c;使这种故障缺陷反而成为一种艺术品&#xff0c;具有特殊…

JMter随记

线程组&#xff08; Threads &#xff08;Users&#xff09;&#xff09;理解&#xff1a;一个虚拟用户组&#xff0c;线程组内线程数量在运行过程中不会发生改变。 注意事项&#xff1a;线程间变量相互独立。 一个测试计划内可以包含多个线程组。 可定义内容&#xff1a; 取样…

爱情 by叶挺王

所有的路 都是为你而铺设 所有的桥 都是为你而架备 所有的亭宇 都是为你而营造 所有的愿望 都是为你而存在 你是我的所有 为此 我日夜忧愁 漫漫长路 只怕你眷恋身后 危危廊桥 只怕你惊于飞流 幽幽楼阁 只怕你凄怨逗留 小小心愿 只怕你未能实现 为你忧愁 然而 我愿意 我愿意是路…

mysql 数据回滚_Mysql数据误删除快速回滚

作者 | Video极链科技OPSTeam整理 | 包包在数据库操作中&#xff0c;难免会因为各种各样的原因对数据造成损坏&#xff0c;这个时候就需要对数据库快速恢复。传统的方法会先恢复mysql备份&#xff0c;再去用mysqlbinlog抽取指定时间点的日志&#xff0c;再恢复&#xff0c;这样…

js 类数组arguments详解

arguments并不是一个真正的数组&#xff0c;而是一个“类似数组&#xff08;array-like&#xff09;”的对象&#xff1b; 就像下面的这段输出&#xff0c;就是典型的类数组对象&#xff1a; [12, 23, callee: ƒ, Symbol(Symbol.iterator): ƒ] 一、类数组 VS 数组 相同点&…

OSPF协议概述(一)

1. 根据来源不同&#xff0c;路由表中的路由通常可以分为以下三类: 链路层协议发现的路由&#xff08;也称为接口路由或直连路由&#xff09;。 由网络管理员手工配置的静态路由 动态路由协议发现的路由。&#xff08;RIP,OSPF,IS-IS&#xff09; 2. 距离矢量算法和…

深度工作:充分使用每一份脑力

浮躁已经成了普遍的社会现象。判断一个人是否浮躁非常容易&#xff0c;看他一天主动拿起手机的次数就可以了。据TED的演讲者说&#xff0c;这个值一般是50次&#xff0c;除了8小时的睡觉之外&#xff0c;基本上每20分钟就要去翻翻手机。 你会去用手机做什么&#xff1f;看微信&…

mysql表碎片空间计算_一篇介绍表空间碎片产生,计算和解决的文章。

一篇介绍表空间碎片产生&#xff0c;计算和解决的文章。我们知道&#xff0c;oracle作为一种大型数据库&#xff0c;广泛应用于金融、邮电、电力、民航等数据吞吐量巨大&#xff0c;计算机网络广泛普及的重要部门。对于系统管理员来讲&#xff0c;如何保证网络稳定运行&#xf…

Python自动化--语言基础5--面向对象、迭代器、range和切片的区分

面向对象 一、面向对象代码示例&#xff1a; 1 class Test(): #类的定义2 car "buick" #类变量&#xff0c;定义在类里方法外&#xff0c;可被对象直接调用&#xff0c;具有全局效果3 def __init__(self): #构造方法4 self.na…

CCIR601和CCIR656标准的区别

关于这两种信号的区别&#xff1a; ITU-R BT 601:16位数据传输&#xff1b;21芯&#xff1b;Y、U、V信号同时传输。 ITU-R BT 656:9芯&#xff0c;不需要同步信号&#xff1b;8位数据传输&#xff1b;串行视频传输&#xff1b;传输速率是601的2倍&#xff1b;先传Y&#xff0c;…

ssis mysql to server_SSIS:将表从MySQL复制到SQL Server 2008

SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Errorcode: 0x80040E21. An OLE DB record is available. Source: “MicrosoftSQL Server Native Client 10.0” Hresult: 0x80040E21 Description:“Multiple-step OLE DB operation generated errors. Chec…

Spring Boot 入门之缓存和 NoSQL 篇(四)

原文地址&#xff1a;Spring Boot 入门之缓存和 NoSQL 篇&#xff08;四&#xff09; 博客地址&#xff1a;http://www.extlight.com 一、前言 当系统的访问量增大时&#xff0c;相应的数据库的性能就逐渐下降。但是&#xff0c;大多数请求都是在重复的获取相同的数据&#xff…

Silverlight 2.5D RPG游戏技巧与特效处理:(七)动画特写

Silverlight中的HLSL不仅适用于场景与动画渲染&#xff0c;对于游戏中的角色&#xff0c;我们同样可以利用它制作动画特写。较常见的比如角色传送时的淡入淡出、扭曲变形、幻化呈现等切换动画&#xff0c;当然还有例如角色被DeBuff时所表现出来的放大缩小以及虚弱时的不规则体形…

mysql myisampack_每天进步一点达——MySQL——myisampack

一、简单介绍myisampack是一个压缩使用MyISAM引擎表的工具&#xff0c;通常会压缩40%~70%,当须要訪问数据。server会将所须要的信息读入到内存中。所以当訪问详细记录时&#xff0c;性能会更好&#xff0c;由于仅仅须要解压一条记录MySQL使用mmap()对变哦进行压缩映射&#xff…

实现搜索功能

准备视图函数search()修改base.html 中搜索输入框所在的<form action"{{ url_for(search) }}" method"get"> <input name"q" type"text" placeholder"请输入关键字">完成视图函数search()获取搜索关键字q re…

日本核辐射究竟有多可怕?

你应该已经知道了由于日本海啸引起的核电站事故。大量无辜的人在得知放射性原料&#xff08;物质&#xff09;泄露的消息之后&#xff0c;都感到害怕和恐慌。 而让你保持冷静的唯一方法&#xff0c;就是掌握正确的科学知识。 有关核辐射的知识 这里有一些信息&#xff1a;   …

mysql下载安装及配置_mysql的下载,安装和配置

顺道向大家介绍一下mysql的安装和配置&#xff0c;mysql数据库应该说是现在整个互联网行业最流行的数据库了&#xff0c;简单易用1.下载&#xff0c;大家可以去官网下载最新的mysql版本&#xff0c;地址&#xff1a;http://dev.mysql.com/downloads/mysql/5.6.html&#xff0c;…

[svc]gns3模拟器及探讨几个bgp问题

模拟器 链接&#xff1a;https://pan.baidu.com/s/1geMcmND 密码&#xff1a;7iir gns0.8.6的版本好用 思科的这个iso好用: c3660-js2-mz.124-21a.bin C2691-AD.BIN(这个也很ok,但是这两个支持的hash算法较少) ctrlshit6 停止命令 R1(config)#crypto isakmp policy 10 R1(confi…

算法导论8.3-4习题解答(基数排序)

CLRS 8.3-4 : 说明如何在O(n)时间内&#xff0c;对0到n^2 - 1之间的n个整数进行排序。 算法思想&#xff1a; 1.把这n个数看成n进制数&#xff0c;那么每个数只有两位&#xff0c;因而循环只需两次 2.调用通用的基数排序(在这写着&#xff0c;留着以后用) 在此题中&#xff0c…

mysql open-files-limit_在mysql 5.5中更改open-files-limit

我在使用open-files-limit参数在Ubuntu 12.04上运行mysql 5.5时遇到问题.我最近注意到由于1024限制导致的一些问题,实际上主系统限制设置为1024,所以我使用以下内容修改了/etc/security/limits.conf&#xff1a;* soft nofile 32000* hard nofile 32000root soft nofile 32000r…