在工作中处理Zip文件又比较频繁
为了减少重复代码,因此写了个Zip文件
读取处理工具类
public static void readZipEntry(ZipFile zipFile, ZipEntry zipEntry, Consumer<String> consumer) {
InputStream inputStream = null;
BufferedReader br = null;
String line = null;
try {
inputStream = zipFile.getInputStream(zipEntry);
br = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));
while (true) {
line = br.readLine();
if (line == null) {
break;
}
if (StringUtils.isBlank(line)) {
continue;
}
consumer.accept(line);
}
} catch (Exception e) {
log.info("文件名{},文件内容{},异常 ", zipEntry.getName(), line, e);
} finally {
IOUtils.closeQuietly(br);
IOUtils.closeQuietly(inputStream);
}
}
使用方法如下
public static void main(String[] args) throws Exception {
String path = "/Users/wuss/Downloads/UpdateHotels.zip";
ZipFile zipFile = new ZipFile(path);
Map<String, ZipEntry> map = getZipEntry(zipFile);
for (Map.Entry<String, ZipEntry> entry : map.entrySet()) {
readZipEntry(zipFile, entry.getValue(), t -> {
System.out.println(t);
});
System.out.println(entry.getValue().getName());
System.out.println("---------------------");
}
System.out.println(map);
}
private static Map<String, ZipEntry> getZipEntry(ZipFile zipFile) {
Map<String, ZipEntry> map = new HashMap<>();
Enumeration<? extends ZipEntry> entries = zipFile.entries();
while (entries.hasMoreElements()) {
ZipEntry zipEntry = entries.nextElement();
String name = zipEntry.getName();
map.put(name, zipEntry);
}
return map;
}