快速获取zip的文件目录


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。

你可能感兴趣的:(快速获取zip的文件目录)