对zip文件解析,本可以直接解析zip文件成个个子文件,但是有的情况是我们并不需要生成文件(这个动作会保存生成文件),因此这里提供一个内存在处理的方式,如有问题,望指正。
/**
* 读取ZIP文件流
* @param inputStream
* @return
* @throws Exception
*/
public static List<byte[]> readZipInputStream(ZipInputStream zis) throws Exception {
List<byte[]> lst_byte = new ArrayList<byte[]>();
while (zis.getNextEntry() != null) {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = zis.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
lst_byte.add(bos.toByteArray());
bos.close();
zis.getNextEntry(); //关闭该条目
}
return lst_byte;
}
以上方法是直接通过输入流InputStream得到ZipInputStream,然后调用方法即可。
InputStream inputStream = conn.getInputStream(); //得到输入流
ZipInputStream zis = new ZipInputStream(inputStream);
对于得到的List<byte[]> 这个每一个byte[]都是一个子文件字节表达,可以直接操作。
比如zip文件中都是文本文件,那么循环List new String(byte[], "UTF-8") 就可以获取到所有文件的字符文本了。