2011-04-28 78 views
0

我有一個包含jar文件的目錄,現在我想搜索一個特定的文件,說log4j.xml它包含在該目錄的某個jar中。我沒有得到如何搜索該文件。請幫助我。在一個罐子裏搜索一個文件

+0

你想編寫一個Java應用程序來做到這一點?或者您可以使用其他工具,例如Agent Ransack,http://www.mythicsoft.com/page.aspx?type=agentransack&page=home。 Agent Ransack支持使用zip和其他存檔文件進行搜索,只需在Agent Ransack工具的「包含文本」字段中指定搜索字符串即可。 – 2011-04-28 08:41:18

+0

Agent Ransack不會搜索JAR,ZIP和其他歸檔文件中的文件名。 – Juraj 2011-11-04 10:16:37

回答

0

它非常依賴於一件事 - 你的jar是否在類路徑上。

  • 如果不是在類路徑中,你將不得不打開它作爲一個zip壓縮文件(與java.util.zip或公地壓縮)和瀏覽特定條目
  • 如果是在classpath,你可以使用像spring這樣的資源框架,你可以在其中指定classpath:log4j.xml
+0

我還有一個問題,現在當我指定文件的路徑,即file:///sw/merlot/config/log4j.xml(這不是在jar中)時,它沒有從該路徑取得log4j.xml ,取而代之的是將默認的log4j.xml存儲在jar中。我可以如何指定該路徑,以便從指定的路徑獲取log4j.xml,而不是從jar中獲取它。 – indira 2011-04-28 09:08:13

0

jar tf <filename>你可以列出一個jar文件的內容。如果有一幫那些你可以使用類似find . -name "*.jar" -exec jar tf {} \; | grep log4j.xml

1

如果你的意思是classpath中的罐子,那麼你可以使用的getResource或的getResourceAsStream。

(如果沒有,再看看@ Bohzo的回答,回覆:java.util.zip)

http://download.oracle.com/javase/1.4.2/docs/api/java/lang/ClassLoader.html#getResource(java.lang.String

我通常把它叫做如下:

this.getClass().getClassLoader().getResource("log4j.xml"); 

還應注意相關方法:getResourceAsStream(),getResources,findResources等

HTH

0

如果JAR不在類路徑上,但在文件系統中的常規文件,那麼你可以使用TrueZIP 7做的工作:

首先,設置TrueZIP有模塊上的truezip驅動器,ZIP運行時間類路徑。然後將以下代碼滿足您的特定需求:

TFile jar = new TFile("path/to/my.jar"); // a subclass of java.io.File 
if (jar.isDirectory()) // true for regular directories and JARs if truezip-driver-zip is on your run time class path 
    for (TFile entry : jar.listFiles()) { // iterate top level directory 
     if ("log4j.xml".equals(entry.getName())) { 
      // Bingo! Now read the file or write it 
      InputStream in = new TFileInputStream(entry); 
      try { 
       ... // do something here 
      } finally { 
       in.close(); 
      } 
     } else if (entry.isDirectory()) { 
      ... // use recursion to continue searching in this directory 
     } 
    } 

問候, 基督教

相關問題