【问题标题】:How to _directly_ get a list of files from a sub-directory in a .JAR - JAVA如何_直接_从 .JAR 的子目录中获取文件列表 - JAVA
【发布时间】: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,但我无法访问它,进一步看它看起来只是 ZipFileInputStreamZipFile - 这让我回到了第一格。

【问题讨论】:

    标签: java path jar filepath subdirectory


    【解决方案1】:

    抱歉,没有其他方法,至少没有标准的 java 库。一个 zip 文件只包含一个条目列表,其中没有“随机访问”查找。可能还有其他库可以为您解析列表并创建某种层次的条目映射,但无论哪种方式,一些代码都需要遍历所有条目以找到您需要的内容。

    【讨论】:

    • 发布后,我认为这可能只是由于 zip 文件的格式/结构所致。谢谢。
    猜你喜欢
    • 2022-11-25
    • 1970-01-01
    • 2013-03-06
    • 2012-11-22
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多