java实现简单压缩与解压缩功能
void close() 关闭 ZIP 输出流和正在过滤的流。void putNextEntry(ZipEntry e) 开始写入新的 ZIP 文件条目并将流定位到条目数据的开始处。void setComment(String comment) 设置 ZIP 文件注释。void write(byte[] b, int off, int len) 将字节数组写入当前 ZIP 条目数据。
void close() 关闭此输入流并释放与此流关联的所有系统资源。ZipEntry getNextEntry() 读取下一个 ZIP 文件条目并将流定位到该条目数据的开始处。int read(byte[] b, int off, int len) 从当前 ZIP 条目读入字节数组。
ZipFile(File file)打开供阅读的 ZIP 文件,由指定的 File 对象给出。ZipFile(File file, int mode)打开新的 ZipFile 以使用指定模式从指定 File 对象读取。ZipFile(String name)打开 ZIP 文件进行阅读。
void close()关闭 ZIP 文件。Enumeration<? extends ZipEntry> entries()返回 ZIP 文件条目的枚举。ZipEntry getEntry(String name)返回指定名称的 ZIP 文件条目;如果未找到,则返回 null。InputStream getInputStream(ZipEntry entry)返回输入流以读取指定 ZIP 文件条目的内容。String getName()返回 ZIP 文件的路径名。int size()返回 ZIP 文件中的条目数。
public static void ZipFileDemo(File zipFile) throws ZipException, IOException
{
ZipFile zf = new ZipFile(zipFile);//创建ZipFile对象
int size = zf.size();//返回ZIP 文件中的条目数
Enumeration<? extends ZipEntry> en = zf.entries();//枚举压缩文件中的条目数
System.out.println("压缩文件中包含以下文件:");
while(en.hasMoreElements())//遍历
{
ZipEntry zipEntry = en.nextElement();
System.out.println(zipEntry.getName());//输出压缩文件中每个条目的名称
}
System.out.println("ZIP 文件中的条目数,size = " + size);
System.out.println("压缩文件名:" + zf.getName());
}
main方法中调用之:
ZipFileDemo(new File("f:\\demo.zip"));
1.txt
2.txt
3.txt
4.txt
5.txt
6.txt
ZIP 文件中的条目数,size = 6
压缩文件名:f:\demo.zip
下面我们通过一个简单的例子实现压缩与解压缩的功能:
package zip;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
public class ZipTest
{
public static void main(String[] args)
{
// TODO 自动生成的方法存根
try
{
zipSingleFile("f:\\data.zip",new File("f:\\demo\\data.mp3"));
freeSingleFile("f:\\data.zip");
}
catch (IOException e)
{
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
//压缩单个文件
public static void zipSingleFile(String zipName,File file) throws IOException
{
BufferedInputStream bufi =
new BufferedInputStream(new FileInputStream(file));//创建输入流对象,用来读取文件内容
ZipOutputStream zo =
new ZipOutputStream(new FileOutputStream(new File(zipName)));//创建ZipOutputStream对象,用来压缩文件
ZipEntry ze = new ZipEntry(file.getName());//使用指定名称创建新的 ZIP条目
zo.putNextEntry(ze);//开始写入新的 ZIP 文件条目并将流定位到条目数据的开始处。
int len = 0;
byte[] b = new byte[1024];
System.out.println("正在压缩....");
while((len = bufi.read(b)) != -1)
{
zo.write(b, 0, len);//将读取的字节数组写入压缩文件中
}
System.out.println("压缩完成!");
zo.close();
bufi.close();
}
public static void freeSingleFile(String zipName) throws ZipException, IOException
{
System.out.println("正在解压缩....");
ZipFile zf = new ZipFile(new File(zipName));//创建ZipFile对象
ZipInputStream zi = new ZipInputStream(new FileInputStream(zipName));//创建ZipInputStream对象,并绑定一个压缩文件
ZipEntry zipEntry = null;
while((zipEntry = zi.getNextEntry()) != null)//遍历压缩文件中的每个条目并操作之
{
String filename = zipEntry.getName();
File temp = new File("f:\\unpackTest\\" + filename);//创建一个File对象用来存放解压缩后的文件
if (! temp.getParentFile().exists()) //判断路径"f:\\unpackTest\\"是否存在,不存在就创建(默认不自动创建该目录)
temp.getParentFile().mkdirs();
OutputStream out = new FileOutputStream(temp);
InputStream in = zf.getInputStream(zipEntry);//返回输入流以读取指定 ZIP 文件条目的内容。
int len = 0;
byte[] buffer = new byte[1024];
while((len = in.read(buffer)) != -1)
{
out.write(buffer,0,len);//解压缩
}
out.close();
in.close();
System.out.println("解压缩文件成功...");
}
}
}
freeSingleFile方法也可以这样写(用枚举):
public static void freeSingleFile_2(String zipName) throws ZipException, IOException
{
System.out.println("正在解压缩....");
ZipFile zf = new ZipFile(new File(zipName));//创建ZipFile对象
Enumeration<? extends ZipEntry> en = zf.entries();
while(en.hasMoreElements())
{
ZipEntry ze = en.nextElement();
String filename = ze.getName();
File temp = new File("f:\\unpackTest\\" + filename);//创建一个File对象用来存放解压缩后的文件
if (! temp.getParentFile().exists()) //判断路径"f:\\unpackTest\\"是否存在,不存在就创建(默认不自动创建该目录)
temp.getParentFile().mkdirs();
OutputStream out = new FileOutputStream(temp);
InputStream in = zf.getInputStream(ze);//返回输入流以读取指定 ZIP 文件条目的内容。
int len = 0;
byte[] buffer = new byte[1024];
while((len = in.read(buffer)) != -1)
{
out.write(buffer,0,len);//解压缩
}
out.close();
in.close();
System.out.println("解压缩文件成功...");
}
}
假如一个文件夹中含有多个文件,怎样压缩呢?我们可以通过遍历文件的方式压缩每一个条目:
package zip;
import java.io.BufferedInputStream;
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.ZipOutputStream;
public class Zips
{
/**
* @param args
*/
public static void main(String[] args)
{
// TODO 自动生成的方法存根
try
{
zip("f:\\data.zip",new File("f:\\demo"));
}
catch (IOException e)
{
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
public static void zip(String zipName,File file) throws IOException
{
ZipOutputStream zo =
new ZipOutputStream(new FileOutputStream(new File(zipName)));//全局公用一个 ZipOutputStrea对象!
zip(zipName,file,zo);
zo.close();
}
public static void zip(String zipName, File file,ZipOutputStream zo)
throws IOException
{
if(!file.isDirectory())
{
BufferedInputStream bufi =
new BufferedInputStream(new FileInputStream(file));
ZipEntry ze = new ZipEntry(file.getName());
zo.putNextEntry(ze);// 开始写入新的 ZIP 文件条目并将流定位到条目数据的开始处。
int len = 0;
byte[] b = new byte[1024];
System.out.println("正在压缩....");
while ((len = bufi.read(b)) != -1)
{
zo.write(b, 0, len);// 将读取的字节数组写入压缩文件中
}
System.out.println("压缩完成!");
zo.closeEntry();
}
else
{
File[] files = file.listFiles();//遍历
for(File fi : files)
{
zip(zipName,fi,zo);//递归调用
}
}
}
}
java实现简单压缩与解压缩功能相关推荐
- java实现简单扫码登录功能(模仿微信网页版扫码)
java实现简单扫码登录功能 模仿微信pc网页版扫码登录 使用js代码生成qrcode二维码减轻服务器压力 js循环请求服务端,判断是否qrcode被扫 二维码超时失效功能 二维码被扫成功登录,服务端 ...
- Java实现简单的登录注册功能
登录注册在项目开发中是常用的功能需求,以下使用控制台实现一个简单的登录注册功能. 实体类: package com.csdn.entry;public class User {//实体类,对应一个表p ...
- Java案例:压缩与解压缩文件
1.任务 (1)将单个文件压缩成一个zip文件 (2)将整个目录压缩成一个zip文件 (3)将zip压缩文件解压缩到指定目录 2.知识点
- Java实现简单注册登录等功能
UserServlet层 package servlet;import dao.UserDao;import java.util.*;//作为方法入口 public class UserServlet ...
- Java代码简单模仿银行ATM功能
1.首先要了解的是,这个ATM程序本身是一个简单,只为了完成一些ATM具备的一些方法,并非是真正完成一个ATM的全部功能和需求.(效果如下图) 1.这个下面演示的成功的功能: 2.这张图是输入错误的解 ...
- java在线打开xml文件_java实现简单解析XML文件功能示例
本文实例讲述了java实现简单解析XML文件功能.分享给大家供大家参考,具体如下: package demo; import java.io.File; import java.io.IOExcept ...
- 表达式计算器 java代码_Java实现简单的表达式计算器功能示例
本文实例讲述了Java实现简单的表达式计算器功能.分享给大家供大家参考,具体如下: 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例 ...
- 基于C#的压缩与解压缩源码
压缩是一种通过特定的算法来减小计算机文件大小的机制.这种机制是一种很方便的发明,尤其是对网络用户,因为它可以减小文件的字节总数,使文件能够通过较慢的互联网连接实现更快传输,此外还可以减少文件的磁盘占用 ...
- Python学习笔记(一)压缩与解压缩文件
Python压缩与解压缩文件 Python能够直接处理zip文件中的数据,例如需要将对应目录或多文件打包或压缩成zip格式,或者需要查看一个zip格式的归档文件中部分或所有的文件同时避免将这些文件展开 ...
最新文章
- 【node】express的www.js文件里面的process.env.PORT
- python元类编程_python元类编程
- Spring Security构建Rest服务-0100-前言
- flyway java_flyway的使用
- 梅森增益matlab求解,梅森公式互不接触回路及其增益
- Linux如何从普通用户切换到root用户
- jquery ajax 跨域_Laravel 的跨域问题解决方案
- dup java_java web----TCP/DUP 通信
- Selenium 特点
- python爬虫什么意思-Python 爬虫是什么
- 微信小程序之----audio音频播放
- 软件加入使用时间_2020年,加入“midi音乐制作讲堂”内部会员,学音乐制作变得更简单...
- C++算法和数据结构之《二叉树》
- 世界杯ing~这不来个实时数据可视化?(结尾附源码)
- 1414. 和为 K 的最少斐波那契数字数目 贪心+递归 大年初三力扣是想意思意思一下呗~
- 常量指针(Pointer to const)与指针常量(Const pointer)
- 非全日制研究生-在职程序员提升的不错选择
- Android软件中嵌入地图之三:Google地图
- 关于STM32定时器中TI1FP1 与TI1FP2及相关话题
- OBJECTPROPERTY用法整理