在使用zip格式压缩、解压缩时, 压缩可以使用ZipEntry类和ZipOutPutStream类;解压缩可以使用ZipEntry类和ZipInPutStream类
ZipEntry对象:“/”
结尾,则为文件夹,否则为文件。
package com.web.test;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
public class TestZiP {
/* * 文件压缩 * files:要压缩的文件,以文件名数组的形式传参 * destZip:压缩之后zip文件所存在的目录,需要"D:\\"或"D:\\test\"格式 * */
public static void zip(String[] files,String destZip){
FileOutputStream fos = new FileOutputStream(destZip);
BufferedOutputStream bos = new BufferedOutputStream(fos);
ZipOutputStream zos = new ZipOutputStream(bos);
/*循环读取文件,压缩到zip中*/
BufferedInputStream bis = null;
FileInputStream fis = null;
try {
for (int i = 0; i < files.length; i++) {
String file = files[i];
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
/*获取文件名,创建条目并添加到zip中*/
File f = new File(file);
ZipEntry z1 = new ZipEntry(f.getName());
zos.putNextEntry(z1);
/*读取文件中的字节信息,压入条目*/
int tmp = -1;
while((tmp = bis.read()) != -1){
/*写入到目标zip中*/
zos.write(tmp);
}
//todo 这里要关闭流哦
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
zos.closeEntry();
} catch (IOException e) {
e.printStackTrace();
}
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
zos.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/* * 文件解压缩 * zipfile:要解压缩的zip文件 * destpath:解压后文件所放的目录,需要"D:\\"或"D:\\test\"格式 * */
public static void unzip(String zipfile,String destpath) throws FileNotFoundException,IOException{
/* String zipfile = "C:\\Users\\shitb\\Desktop\\jacob_1.9.zip"; String destpath = "D:\\test\\"; */
FileInputStream fis = new FileInputStream(zipfile);
ZipInputStream zis = new ZipInputStream(fis);
ZipEntry z1 = null;
while((z1 = zis.getNextEntry()) != null){
if (z1.isDirectory()) {
File f = new File("D:\\"+z1.getName());
f.mkdirs();
}else {
String fileName = z1.getName();
FileOutputStream fos = new FileOutputStream(destpath+fileName);
int tmp = -1;
while((tmp = zis.read()) != -1){
/*写入到目标文件中*/
fos.write(tmp);
}
zis.closeEntry();
fos.close();
}
}
zis.close();
}
/* * 目录压缩 * zipFileName:压缩后zip文件的路径 * inputFile:需要压缩的源目录; * */
public void zip(String zipFileName,String inputFile) throws IOException{
File file = new File(inputFile);
FileOutputStream fos = new FileOutputStream(zipFileName);
ZipOutputStream out = new ZipOutputStream(fos);
zipDir(out,file,"");
out.close();
}
/* *递归遍历子目录和文件,进行压缩 * */
private void zipDir(ZipOutputStream out, File file, String base) throws IOException {
if (file.isDirectory()) {
File[] files = file.listFiles();
out.putNextEntry(new ZipEntry(base+"/"));
base = base.length()==0?"":base+"/";
for (int i = 0; i < files.length; i++) {
/*进行递归*/
zipDir(out,files[i], base+files[i].getName());
}
}else {
out.putNextEntry(new ZipEntry(base));
FileInputStream fis = new FileInputStream(file);
int len = 0;
while((len = fis.read()) != -1){
/*写入到目标zip中*/
out.write(len);
}
fis.close();
}
}
/* * 解压缩目录 * zipFileName:需要解压缩的zip文件 * outputDirectory:解压缩后文件所放路径 * */
public void unzipDir(String zipFileName,String outputDirectory) throws IOException{
FileInputStream fis = new FileInputStream(zipFileName);
ZipInputStream zis = new ZipInputStream(fis);
ZipEntry zipEntry;
while((zipEntry = zis.getNextEntry()) != null){
if (zipEntry.isDirectory()) {
String name = zipEntry.getName();
name = name.substring(0,name.length()-1);
File f = new File(outputDirectory+File.separator+name);
f.mkdir();
}else {
File f = new File(outputDirectory+File.separator+zipEntry.getName());
f.createNewFile();
FileOutputStream fos = new FileOutputStream(f);
int len = 0;
while((len = zis.read()) != -1){
/*写入到目标文件中*/
fos.write(len);
}
fos.close();
}
}
zis.close();
}
}
今天的文章ZipEntry实现文件解压缩与目录解压缩分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/29960.html