我正在编写一个Java程序,它给出了一个限定名(如java.lang.String:),从src.zipJDK中的文件中获取并返回相应的条目以供进一步处理.
到目前为止,我的程序适用于任何引用特定.java源文件的限定名称; 但是当限定名称引用整个包时(例如:),我遇到了麻烦java.util.*.在这种情况下,我希望我的程序返回给定包中所有条目的列表.
问题是似乎没有办法(有效地)使用java.util.zip.*包中提供的实用程序来做这样的事情!我已经尝试了两个ZipFile并且ZipInputStream没有人识别文件中的src.zip目录!他们只返回单个.java源文件的条目!
在代码语言中,两者都是:
ZipEntry entry;
ZipInputStream zip = new ZipInputStream(new FileInputStream("src.zip"));
while((entry = zip.getNextEntry()) != null)
System.out.println(entry.isDirectory());
Run Code Online (Sandbox Code Playgroud)
和:
Enumeration<? extends ZipEntry> zip = new ZipFile("src.zip").entries();
while (zip.hasMoreElements()) {
ZipEntry entry = zip.nextElement();
System.out.println(entry.isDirectory());
}
Run Code Online (Sandbox Code Playgroud)
总是回归虚假; 根本没有目录!
即使以下代码是无用的,只返回null(这意味着Not Found):
ZipFile zipfile = new ZipFile("src.zip");
zipfile.getEntry("java/util/");
Run Code Online (Sandbox Code Playgroud)
解决方法是使用上面列出的两次迭代中的任何一种,并对所需的条目执行详尽的搜索:
if (entry.getName().startsWith("java/util/"))
System.out.println(entry);
Run Code Online (Sandbox Code Playgroud)
但显然这效率不高!有没有办法检索src.zip文件中的目录条目或有效地列出给定目录路径的条目?请注意,我想直接处理ZIP文件而不提取(出于显而易见的原因).
从Timothy Truckle的回答中可以看出,上面的结果是src.zip在撰写本文时使用最新的Oracle JDK文件(即JDK-8 update-111)实现的.使用src.zip来自不同JDK版本的另一个文件(例如JDK-7 update-80)时,结果会有所不同.在评论中指出实用程序的功劳归功于marabuunzip -l.
虽然解决了检索目录条目的问题,但是没有解决有效地检索包含在ZIP文件的给定目录路径内的条目列表的问题.然而案件仍然关闭,因为根据Timothy Truckle的回答,由于ZIP格式的限制,这不能以任何其他方式完成,而不是在条目中进行详尽的搜索.
| 归档时间: |
|
| 查看次数: |
2325 次 |
| 最近记录: |