需要了解的知识汇总:
DeflaterOutputStream :压缩类的基类。
ZipOutputStream :DeflaterOutputStream的一个子类,把数据压缩成Zip文件格式
GZIPOutputStream :DeflaterOutputStream的一个子类,把数据压缩成GZip文件格式
InflaterInputStream :解压缩类的基类
ZipInputStream :InflaterInputStream的一个子类,能解压缩Zip格式的数据
GZIPInputStream :InflaterInputStream的一个子类,能解压缩Zip格式的数据
ZipEntry 类:表示 ZIP 文件条目
ZipFile 类:此类用于从 ZIP 文件读取条目
以zipentry来命名zip内文件列表。
以FileInputStream来读取文件。
以zipoutputstream输出流进行压缩文件写入。
逻辑简单好懂,附件带有实例,解压即可运行。
百度网盘实例链接:https://pan.baidu.com/s/1VSs-UqtU_3Lld2H7-1dMMg
提取码:mcb3
package com.crscd.server.web.cbtc2.filezip;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
public class FileZip {
/*
-
author:zhao_anan 20190424 zip compress program
/
/public void zip(ZipOutputStream out, File f, String base, boolean first)
throws Exception {
if (first) {
if (f.isDirectory()) {
out.putNextEntry(new ZipEntry("/"));
base = base + f.getName();
first = false;
} else
base = f.getName();
}
if (f.isDirectory()) {
File[] fl = f.listFiles();
base = base + "/";
for (int i = 0; i < fl.length; i++) {
zip(out, fl[i], base + fl[i].getName(), first);
}
} else {
out.putNextEntry(new ZipEntry(base));
FileInputStream in = new FileInputStream(f);
int b;
System.out.println(base);
while ((b = in.read()) != -1) {
out.write(b);
}
in.close();
}
}*//*
-
unzip
/
/public void unZipFileByOpache(ZipFile zipFile, String unZipRoot)
throws Exception, IOException {
Enumeration<?> e = zipFile.entries();
ZipEntry zipEntry;
while (e.hasMoreElements()) {
zipEntry = (ZipEntry) e.nextElement();
InputStream fis = zipFile.getInputStream(zipEntry);
if (zipEntry.isDirectory()) {
} else {
File file = new File(unZipRoot + File.separator- zipEntry.getName());
System.out.println(unZipRoot + File.separator - zipEntry.getName());
File parentFile = file.getParentFile();
parentFile.mkdirs();
FileOutputStream fos = new FileOutputStream(file);
byte[] b = new byte[1024];
int len;
while ((len = fis.read(b, 0, b.length)) != -1) {
fos.write(b, 0, len);
}
fos.close();
fis.close();
}
}
}
public void ZipFile(String zipFileName, String inputFileName)
throws Exception {
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
zipFileName));
File inputFile = new File(inputFileName);
zip(out, inputFile, "", true);
System.out.println("zip done");
out.close();
}public void unZipFile(String unZipFileName, String unZipPath)
throws Exception {
//ZipFile zipFile = new ZipFile(unZipFileName);
//unZipFileByOpache(zipFile, unZipPath);
System.out.println("unZip Ok");
}public static void main(String[] args) throws Exception {
FileZip fileZip = new FileZip();
// ZipFile("d:/testfile.zip","d:/TTPlayer");
fileZip.unZipFile("d:/20120206_SLIS_0002_DY2.zip", "d:/");
}*//**
- zipEntry.getName());
- unzip file 20190424
- @auther: zhao_anan
- @param unzipRoot
-
*/
public void unZipFile(String zipFilename, String unzipRoot)
throws Exception {
BufferedOutputStream bos = null;
FileInputStream fis = new FileInputStream(zipFilename);
BufferedInputStream bis = new BufferedInputStream(fis);ZipInputStream zis = new ZipInputStream(bis); ZipEntry entry = null; int count = 0; byte buf[] = new byte[1024]; while ((entry = zis.getNextEntry()) != null) { if (entry.isDirectory()) { } else { File file = new File(unzipRoot + File.separator + entry.getName()); File parentFile = file.getParentFile(); parentFile.mkdirs(); bos = new BufferedOutputStream(new FileOutputStream(file)); while ((count = zis.read(buf)) != -1) { bos.write(buf, 0, count); } bos.flush(); bos.close(); } } zis.close();
}
/** - zip
- @param zipFilename
- @param unzipRoot
-
*/
private void zip(ZipOutputStream out, File f, String base, boolean first)
throws Exception {
if (first) {
if (f.isDirectory()) {
out.putNextEntry(new ZipEntry("/"));
base = base + f.getName();
first = false;
} else
base = f.getName();
}
if (f.isDirectory()) {
File[] fl = f.listFiles();
base = base + "/";
for (int i = 0; i < fl.length; i++) {
zip(out, fl[i], base + fl[i].getName(), first);
}
} else {
out.putNextEntry(new ZipEntry(base));
// FileInputStream in = new FileInputStream(f);
BufferedReader in = new BufferedReader(new InputStreamReader(
new FileInputStream(f), "ISO8859_1"));
int b;
System.out.println(base);
while ((b = in.read()) != -1) {
out.write(b);
}
in.close();
}
}public void zipFile(String zipFileName, String inputFileName)
throws Exception {
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
zipFileName));
File inputFile = new File(inputFileName);
zip(out, inputFile, "", true);
System.out.println("zip done");
out.close();
}/**
- zip
- @param zipFilename
- @param unzipRoot
-
*/
private void zipList(ZipOutputStream out, String[] fileList, String base)
throws Exception {
base = base + "/";
for (int i = 0; i < fileList.length; i++) {
//zip(out, , base + fileList[i], first);
out.putNextEntry(new ZipEntry(fileList[i]));
BufferedReader in = new BufferedReader(new InputStreamReader(
new FileInputStream(base + fileList[i]), "ISO8859_1"));
int b;
System.out.println(base + fileList[i]);
while ((b = in.read()) != -1) {
out.write(b);
}
in.close();
}
}public void zipListFile(String zipFileName, String inputListFiles, String baseurl)
throws Exception {
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
zipFileName));
String[] FileList = inputListFiles.split(",");
zipList(out, FileList, baseurl);
System.out.println("zip done");
out.close();
}public static void main(String[] args) {
//压缩测试 FileZip tFileZip = new FileZip(); String tinputFileName = "E://temp"; String baseurl = "E://temp"; String tzipFileName = "E://temp.zip"; String inputListFiles = "application-dev.yml,auto_arrange.yml"; try { //tFileZip.zipFile(tzipFileName, tinputFileName); tFileZip.zipListFile(tzipFileName, inputListFiles, baseurl); //tFileZip.unZipFile(tzipFileName, baseurl + "unzip"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }
}
}
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/tech/opensource/192565.html