1. 用GZIP类可进行单文件的压缩及压缩包内容的读取
package cn.yjq.interview;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import org.junit.Test;
public class GZIPcompress {
@Test
public void test1() {
String path = System.getProperty("user.dir")+"\\src\\cn\\yjq\\interview\\GZIPcompress.java";
try {
compress(path, "test.gz");
} catch (IOException e) {
e.printStackTrace();
}
}
//单文件压缩,将内存中数据写入文件并压缩
//压缩文件后缀为.gz
//无法为gz压缩包内的文件取名,默认为.gz的前缀
public static void compress(String fileName, String gzipName) throws IOException {
//读文件内容
BufferedReader br = new BufferedReader(new FileReader(fileName));
//将内存数据写入压缩包
OutputStreamWriter out = new OutputStreamWriter(
new GZIPOutputStream(new FileOutputStream(gzipName)));
String temp = null;
while((temp=br.readLine()) != null) {
out.write(temp+"\r\n");
}
out.close();
br.close();
//读压缩包内容
BufferedReader br2 = new BufferedReader(
new InputStreamReader(new GZIPInputStream(new FileInputStream(gzipName))));
while((temp=br2.readLine()) != null) {
System.out.println(temp);
}
br2.close();
}
}
a)生成的压缩包如下:
2. 用ZIP类进行多文件的压缩及压缩包内容的读取
@Test
public void test2() {
String file1 = System.getProperty("user.dir")+"\\src\\cn\\yjq\\interview\\GZIPcompress.java";
String file2 = System.getProperty("user.dir")+"\\src\\cn\\yjq\\interview\\BufferInputFile.java";
String file3 = System.getProperty("user.dir")+"\\src\\cn\\yjq\\interview\\ViewBuffers.java";
try {
zigCompress("test.zip", new String[] {file1, file2, file3});
} catch (IOException e) {
e.printStackTrace();
}
}
public static void zigCompress(String zipName, String... files) throws IOException {
ZipOutputStream zos = new ZipOutputStream(new CheckedOutputStream(
new FileOutputStream(zipName), new Adler32()));
OutputStreamWriter out = new OutputStreamWriter(zos);
zos.setComment("hello zip");
//读文件到内存,并写入zip包
for(String file : files) {
BufferedReader in = new BufferedReader(new FileReader(file));
zos.putNextEntry(new ZipEntry(file.substring(file.lastIndexOf("\\")+1)));
String temp = null;
while((temp=in.readLine()) != null) {
out.write(temp+"\r\n");
}
in.close();
out.flush();
}
out.close();
//读zip包中所有文件到内存
ZipInputStream ios = new ZipInputStream(new CheckedInputStream(
new FileInputStream(zipName), new Adler32()));
BufferedReader br2 = new BufferedReader(new InputStreamReader(ios));
ZipEntry ze;
String temp;
while((ze=ios.getNextEntry()) != null) {
System.out.println("----fileName: " + ze.getName() + "----");
while((temp=br2.readLine()) != null) {
System.out.println(temp);
}
}
}
a)生成的压缩包如下:
3. apache对zip做了封装,无法下载jar,就不测试了
a) 包:ant.jar
b)类: org.apache.tools.zip.ZipOutputStream;