【发布时间】:2011-11-01 20:46:22
【问题描述】:
我正在寻找一种方法来直接获取 .jar 中指定子目录中所有文件的列表。
这是类似的:How do I list the files inside a JAR file?
但不幸的是,上面列出的方法将遍历整个 .jar 中的所有文件。当使用包含许多文件的 .jar 时 - 这似乎不切实际,就像我的情况一样。必须有一种方法可以直接指向 .jar 中的子目录并遍历其内容,而不必遍历 jar 的所有内容然后过滤结果以找到您关心的条目。
这大概是我所拥有的:
public static ArrayList<String> loadInternalFileListing(MetaDataType type, MetaDataLocation location, String siteId)
{
ArrayList<String> filenameList = new ArrayList<String>();
URL url = getInternalFile(type, null, location, siteId);
JarURLConnection juc = null;
JarFile jarFile = null;
try
{
juc = (JarURLConnection) url.openConnection();
jarFile = juc.getJarFile();
Enumeration<JarEntry> entries = jarFile.entries();
for(JarEntry jarEntry = entries.nextElement(); entries.hasMoreElements(); jarEntry = entries.nextElement())
{
...//logic here
}
}
... //catch, handle exceptions, finally block and other logic
return filenameList;
}
变量:url ->: jar:file:/C:/jboss-4.2.2.GA/server/username/tmp/deploy/tmp8421264930467110704SomeEar。 ear-contents/SomeBusiness.jar!/subdir1/subdir2/subdir3/subdir4/
路径:/subdir1/subdir2/subdir3/subdir4/ 正是我要迭代的地方。
调试表明 juc 确实创建正确并指向正确的路径。 jarFile 然后正如预期的那样,只是给了我 jar 文件路径,这就是我丢失子目录以及从根开始迭代的原因。这一切都说得通。这显然不是正确的方法。必须有另一种方式!
弄乱 JarURLConnection 理论上指向我感兴趣的正确目录,并没有透露任何有用的信息。有 JarURLConnection.getInputStream()。调试器表明这最终包含一个 ZipFileInputStream,但我无法访问它,进一步看它看起来只是 ZipFileInputStream 到 ZipFile - 这让我回到了第一格。
【问题讨论】:
标签: java path jar filepath subdirectory