簡體   English   中英

如何從.JAR的子目錄中直接獲取文件列表-JAVA

[英]How to _directly_ get a list of files from a sub-directory in a .JAR - JAVA

我正在尋找一種直接獲取.jar內指定子目錄中所有文件列表的方法。

這類似: 如何列出JAR文件中的文件?

但是不幸的是,上面列出的方法將遍歷整個.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/服務器/用戶名/tmp/deploy/tmp8421264930467110704SomeEar.ear-contents/SomeBusiness.jar!/subdir1/subdir2/subdir3/subdir4/

路徑:/ subdir1 / subdir2 / subdir3 / subdir4 /正是我要迭代的位置。

調試顯示, juc確實創建正確並指向正確的路徑。 jarFile然后按預期方式給了我jar文件路徑,這就是為什么我丟失子目錄以及為什么從根開始迭代的原因。 這一切都說得通。 這顯然不是正確的方法。 必須有另一種方式!

從理論上講,指向我感興趣的正確目錄的JarURLConnection並沒有帶來任何有用的信息。 JarURLConnection.getInputStream() 調試器表明它最終擁有一個ZipFileInputStream ,但我無法訪問它,並且進一步看,它看起來像只是ZipFileZipFileInputStream ,這使我回到了平方。

抱歉,沒有其他方法,至少沒有標准的Java庫。 一個zip文件僅包含一個條目列表,其中沒有“隨機訪問”查找。 可能還有其他庫可以為您解析列表並創建某種條目的層次結構圖,但是無論哪種方式, 某些代碼都需要遍歷所有條目以找到所需的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM