/**
* Project Name:DemoMer
* File Name:zipUtil.java
* Date:2018/10/15 11:10
* Copyright (c) 2018.
*/
/**
* ClassName: zipUtil
* Function: TODO ADD FUNCTION.
* Date: 2018/10/15 11:10
* @author li
* @version
* @since JDK 1.8
*/
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.InflaterInputStream;
import java.util.zip.ZipInputStream;
//import org.apache.tools.zip.ZipFile;
/**
* 解压Zip文件工具类
* @author zhangyongbo
*
*/
public class ZipUtil {
/**
*
* @param input Zip文件的流
* @throws Exception
*/
public void upload(InputStream input,String destPath) throws Exception {
ZipInputStream zis = new ZipInputStream(input);
java.util.zip.ZipEntry entry = null;
while ((entry = zis.getNextEntry()) != null) {
// System.out.printf("条目信息: 名称%1$b, 大小%2$d, 压缩时间%3$d \n",
// entry.getName(), entry.getSize(), entry.getTime());
if (entry.isDirectory()) { // is dir
// System.out.println(entry.getName() + "是一个目录");
File f = new File(destPath + File.separator + entry.getName());
if (!f.exists())
f.mkdirs();
} else { //
byte[] data = getByte(zis); // 获取当前条目的字节数组
InputStream is = new ByteArrayInputStream(data); // 把当前条目的字节数据转换成Inputstream流
String[] names = entry.getName().split("/");
String path = destPath + File.separator;
path += join(names, File.separator);
//System.out.println(path);
File file = new File(path);
if (!file.exists()) {
file.createNewFile();
toWrite(is, file);
}
}
}
}
/**
* 向file文件写入字节
* @param ins
* @param file
*/
public static void toWrite(InputStream ins, File file) {
try {
OutputStream os = new FileOutputStream(file);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
ins.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取条目byte[]字节
* @param zis
* @return
*/
public byte[] getByte(InflaterInputStream zis) {
try {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
byte[] temp = new byte[1024];
byte[] buf = null;
int length = 0;
while ((length = zis.read(temp, 0, 1024)) != -1) {
bout.write(temp, 0, length);
}
buf = bout.toByteArray();
bout.close();
return buf;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
public static String join(Object[] o, String flag) {
StringBuffer str_buff = new StringBuffer();
for (int i = 0, len = o.length; i < len; i++) {
str_buff.append(String.valueOf(o[i]));
if (i < len - 1)
str_buff.append(flag);
}
return str_buff.toString();
}
public static void main(String[] args) throws Exception {
TestZip test = new TestZip();
String filePath = "D:\\20887212384979710156_20180701_DETAILS.zip";
// File file = new File(filePath);
InputStream input = new BufferedInputStream(new FileInputStream(filePath));
test.upload(input,"E:\\work");
}
}
将InputStream—zip文件流直接解压缩
最新推荐文章于 2024-06-16 09:46:17 发布