我就废话不多说了,大家还是直接看代码吧~
不多说,直接上代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public static void main(String[] args) throws Exception{
//压缩文件
File src = new File( "e:/xx/aa.txt" );
File zipFile = new File( "e:/xx/a.zip" );
FileOutputStream fos = new FileOutputStream(zipFile);
ZipOutputStream zos = new ZipOutputStream(fos);
BufferedInputStream bis = new BufferedInputStream( new FileInputStream(src));
ZipEntry entry = new ZipEntry( src.getName());
zos.putNextEntry(entry);
int count;
byte [] buf = new byte [ 1024 ];
while ((count = bis.read(buf)) != - 1 ) {
zos.write(buf, 0 , count);
}
bis.close();
//fos.close();
zos.close(); //
}
|
压缩的步骤是:
src将要压缩的文件,zipFile 压缩后的文件,压缩流套接zipFile,然后将src文件写入zipFile,其中ZipEntry中放入的源文件的当前名称,putNextEntry是将源文件的当前名称定位到条目数据的开始处。
补充:Java ZIP压缩输入输出流
ZIP是一种较为常见的压缩形式,在Java中要想实现ZIP的压缩需要导入java.util.zip包,可以使用此包中的ZipFile、ZipOutputStream、ZipInputStream、ZipEntry几个类完成。
ZipOutputStream类的常用方法
ZipInputStream类的常用方法
在JAVA IO中,不仅可以实现ZIP压缩格式的输入、输出,也可以实现JAR及GZIP文件格式的压缩:
1、JAR压缩的支持类保存在java.util.jar包中,常用的类有 JarOutputStream(JAR压缩输出流)、JarInputStream(JAR压缩输入流)、JARFile(JAR文件)、JAREntry(JAR实体)
2、GZIP是用于UNIX系统的文件压缩,在Linux中经常会使用到*.gz的文件,就是GZIP格式,GZIP压缩的支持类保存在java.util.zip包中,常用的类有 GZIPOutputStream(GZIP压缩输出流)、GZIPInputStream(GZIP压缩输入流)
注意:
1、压缩文件中的每一个压缩实体都使用ZipEntry保存,一个压缩文件中可能包含一个或多个ZipEntry对象。
2、在JAVA中可以进行zip、jar、gz三种格式的压缩支持,操作流程基本上是一致的。
3、ZipOutputStream可以进行压缩的输出,但是输出的位置不一定是文件。
4、ZipFile表示每一个压缩文件,可以得到每一个压缩实体的输入流。
压缩文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
import java.io.*;
import java.util.zip.*;
public class MyZip { // 创建类
private void zip(String zipFileName, File inputFile) throws Exception {
ZipOutputStream out = new ZipOutputStream( new FileOutputStream(
zipFileName)); // 创建ZipOutputStream类对象
zip(out, inputFile, "" ); // 调用方法
System.out.println( "压缩中…" ); // 输出信息
out.close(); // 将流关闭
}
private void zip(ZipOutputStream out, File f, String base)
throws Exception { // 方法重载
if (f.isDirectory()) { // 测试此抽象路径名表示的文件是否是一个目录
File[] fl = f.listFiles(); // 获取路径数组
out.putNextEntry( new ZipEntry(base + "/" )); // 写入此目录的entry
base = base.length() == 0 ? "" : base + "/" ; // 判断参数是否为空
for ( int i = 0 ; i < fl.length; i++) { // 循环遍历数组中文件
zip(out, fl[i], base + fl[i]);
}
} else {
out.putNextEntry( new ZipEntry(base)); // 创建新的进入点
// 创建FileInputStream对象
FileInputStream in = new FileInputStream(f);
int b; // 定义int型变量
System.out.println(base);
while ((b = in.read()) != - 1 ) { // 如果没有到达流的尾部
out.write(b); // 将字节写入当前ZIP条目
}
in.close(); // 关闭流
}
}
public static void main(String[] temp) { // 主方法
MyZip book = new MyZip(); // 创建本例对象
try {
// 调用方法,参数为压缩后文件与要压缩文件
book.zip( "hello.zip" , new File( "src" ));
System.out.println( "压缩完成" ); // 输出信息
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
|
解压文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
import java.io.*;
import java.util.zip.*;
public class Decompressing { // 创建文件
public static void main(String[] temp) {
ZipInputStream zin; // 创建ZipInputStream对象
try { // try语句捕获可能发生的异常
zin = new ZipInputStream( new FileInputStream( "hello.zip" ));
// 实例化对象,指明要进行解压的文件
ZipEntry entry = zin.getNextEntry(); // 获取下一个ZipEntry
while (((entry = zin.getNextEntry()) != null )
&& !entry.isDirectory()) {
// 如果entry不为空,并不在同一目录下
File file = new File( "d:\\" + entry.getName()); // 获取文件目录
System.out.println(file);
if (!file.exists()) { // 如果该文件不存在
file.mkdirs(); // 创建文件所在文件夹
file.createNewFile(); // 创建文件
}
zin.closeEntry(); // 关闭当前entry
System.out.println(entry.getName() + "解压成功" );
}
zin.close(); // 关闭流
} catch (Exception e) {
e.printStackTrace();
}
}
}
|
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。如有错误或未考虑完全的地方,望不吝赐教。
原文链接:https://blog.csdn.net/qq_35306443/article/details/84099784