zip包中,当想要解压特定目录下的所有文件,一般情况下是获取所有的entry,然后拿entry的filename来比较,这个比较慢。
而在ZipFile类中有LinkedHashMap<String, ZipEntry> entries;但这个成员是私有的,因此可以通过反射直接获取到这个map,然后取keyset之后就可以获取到所有的文件
代码如下:
private static boolean hasObjectDir(String zipFile,
ArrayList<String> objDirList) {
ZipFile zfiles = null;
try {
zfiles = new ZipFile(zipFile);
LinkedHashMap<String, ZipEntry> entries = (LinkedHashMap<String, ZipEntry>) ReflectUtil
.getSuperFieldValue(zfiles, "entries");
Set<String> keySet = entries.keySet();
String FilesSetStr = keySet.toString();
for (String dir : objDirList) {
if (FilesSetStr.contains(dir))
return true;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (null != zfiles)
zfiles.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return false;
}
这样可以避免枚举一个个entry。