在jar中搜索文件

时间:2011-04-28 08:33:20

标签: java jar

我有一个包含jar文件的目录,现在我想搜索一个特定文件,说log4j.xml包含在该目录中的某个jar中。我没有得到如何搜索该文件。请帮我解决。

5 个答案:

答案 0 :(得分:1)

如果 是指类路径上的jar,则可以使用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

答案 1 :(得分:0)

这在很大程度上取决于一件事 - 你的jar是否在类路径上。

  • 如果它不在类路径上,则必须将其作为zip存档(使用java.util.zip或commons-compress)打开并浏览特定条目
  • 如果它在类路径上,您可以使用类似于spring的资源框架,您可以在其中指定classpath:log4j.xml

答案 2 :(得分:0)

使用jar tf <filename>,您可以列出jar文件的内容。如果有一堆,你可以使用像find . -name "*.jar" -exec jar tf {} \; | grep log4j.xml

这样的东西

答案 3 :(得分:0)

如果JAR不在类路径上,而是文件系统中的常规文件,那么您可以使用TrueZIP 7来完成这项工作:

首先,设置TrueZIP以在运行时类路径上使用模块truezip-driver-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
        }
    }

此致 基督教

答案 4 :(得分:0)

我为这个场合开发了一个工具:https://github.com/javalite/jar-explorer