我有一個包含jar文件的目錄,現在我想搜索一個特定的文件,說log4j.xml它包含在該目錄的某個jar中。我沒有得到如何搜索該文件。請幫助我。在一個罐子裏搜索一個文件
回答
它非常依賴於一件事 - 你的jar是否在類路徑上。
- 如果不是在類路徑中,你將不得不打開它作爲一個zip壓縮文件(與java.util.zip或公地壓縮)和瀏覽特定條目
- 如果是在classpath,你可以使用像spring這樣的資源框架,你可以在其中指定
classpath:log4j.xml
。
我還有一個問題,現在當我指定文件的路徑,即file:///sw/merlot/config/log4j.xml(這不是在jar中)時,它沒有從該路徑取得log4j.xml ,取而代之的是將默認的log4j.xml存儲在jar中。我可以如何指定該路徑,以便從指定的路徑獲取log4j.xml,而不是從jar中獲取它。 – indira 2011-04-28 09:08:13
與jar tf <filename>
你可以列出一個jar文件的內容。如果有一幫那些你可以使用類似find . -name "*.jar" -exec jar tf {} \; | grep log4j.xml
如果你的意思是classpath中的罐子,那麼你可以使用的getResource或的getResourceAsStream。
(如果沒有,再看看@ Bohzo的回答,回覆:java.util.zip)
我通常把它叫做如下:
this.getClass().getClassLoader().getResource("log4j.xml");
還應注意相關方法:getResourceAsStream(),getResources,findResources等
HTH
如果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
}
}
問候, 基督教
我開發了一個工具,只是這一次:https://github.com/javalite/jar-explorer
- 1. 運行位於在一個罐子裏是另一個罐子
- 2. 不能getResourcesAsStream()從一個文件夾(在一個罐子裏)
- 3. 將一個文件夾附加到一個罐子裏
- 4. 閱讀一個文件,其中包含一個罐子裏
- 5. 哪個文件在一個罐子裏讀取參數
- 6. 將一個文件夾中的所有文件保存在一個罐子裏
- 7. 加載包含在一個罐子裏
- 8. 的Maven在一個罐子裏
- 9. 在另一個罐子裏面運行外部罐子
- 10. 在罐子裏面打開一個文件
- 11. 使用螞蟻在一個罐子裏重組文件
- 12. 包括一個Excel文件和調用一次打包到一個罐子裏
- 13. 使用GREP在罐子裏搜索xml文件
- 14. 在一個文件中搜索一個句子java
- 15. 從罐子里加載一個文件夾
- 16. 非常簡單從我的罐子裏複製一個文件
- 17. 從另一個罐子裏的類中讀取屬性文件
- 18. 在一個罐子裏結合多個模塊的maven項目的罐子
- 19. 在另一臺機器上從一個罐子里加載一個班級,而無需下載整個罐子
- 20. bash命令:搜索文件系統的罐子裏的類
- 21. 如何添加一個類文件到一個jar文件的另一個罐子裏面
- 22. 罐子一個Jar
- 23. 編譯一個Eclipse項目到一個罐子裏
- 24. 從一個罐子里加載一個類
- 25. 正在搜索一個文本文件
- 26. 如何添加一個罐子庫到另一個罐子庫
- 27. 在一大羣罐子裏找到一個特定的類
- 28. 得到一個jar文件系統的另一個罐子
- 29. 使用一個罐子來構建一個jar文件
- 30. 在同一個罐子裏打包多個OSGi包
你想編寫一個Java應用程序來做到這一點?或者您可以使用其他工具,例如Agent Ransack,http://www.mythicsoft.com/page.aspx?type=agentransack&page=home。 Agent Ransack支持使用zip和其他存檔文件進行搜索,只需在Agent Ransack工具的「包含文本」字段中指定搜索字符串即可。 – 2011-04-28 08:41:18
Agent Ransack不會搜索JAR,ZIP和其他歸檔文件中的文件名。 – Juraj 2011-11-04 10:16:37