Java zip解析
需求:项目中存在大量的模板需要更新替换,一个个手动更新效率太慢,所以需要做一个上传压缩包更新模板的功能。
代码: 压缩包解析 并返回相对路径和文件
/**
* 解压zip 范围对应路径和模板文件
* @param zipName zip文件
* @return
*/
public Map<String, InputStream> upzipFile(File zipName) {
Map<String, InputStream> map = new HashMap<>();
try {
// 根据zip文件创建ZipFile对象,此类的作用是从zip文件读取条目
ZipFile zipFile = new ZipFile(zipName, Charset.forName("GBK"));
ZipEntry zn = null;
String entryName = null;
// 获取zip文件里所有的文件条目的名字
Enumeration entrys = zipFile.entries();
// 循环遍历所有的文件条目的名字
while (entrys.hasMoreElements()) {
zn = (ZipEntry) entrys.nextElement();
// 获得每一条文件的名字
entryName = zn.getName();
// 不是文件夹
if (!zn.isDirectory()) {
// 存放文件的名字和文件
InputStream is = zipFile.getInputStream(zn);
// 名字是相对路径+文件名 如果不存在重名的情况下可以选择去掉相对路径只取名字
// String[] split = entryName.split("/");
// entryName = split[split.length - 1];
map.put(entryName, is);
}
}
System.err.println("------------------------------------解析"+zipName+"成功!");
} catch (IOException err) {
System.err.println("------------------------------------解析"+zipName+"失败: " + err);
}
return map;
}