Поиск файла в банке - PullRequest
       3

Поиск файла в банке

0 голосов
/ 28 апреля 2011

У меня есть каталог, содержащий файлы jar, теперь я хочу найти конкретный файл, скажем, log4j.xml, который содержится в каком-то jar-файле в этом каталоге. Я не понимаю, как искать этот файл.

Ответы [ 5 ]

1 голос
/ 28 апреля 2011

Если вы имеете в виду jar на пути к классам, то вы можете использовать getResource или getResourceAsStream.

(Если нет, то смотрите ответ @ Bohzo, re: 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 и т. Д.

НТН

0 голосов
/ 26 апреля 2014

Я разработал инструмент только для этого случая: https://github.com/javalite/jar-explorer

0 голосов
/ 03 мая 2011

Если 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
        }
    }

С уважением, Christian

0 голосов
/ 28 апреля 2011

с jar tf <filename> вы можете перечислить содержимое файла JAR. Если есть куча таких, вы можете использовать что-то вроде find . -name "*.jar" -exec jar tf {} \; | grep log4j.xml

0 голосов
/ 28 апреля 2011

Это очень сильно зависит от одной вещи - ваша банка на пути к классам или нет.

  • если его нет в пути к классам, вам придется открыть его в виде zip-архива (с помощью java.util.zip или commons-compress) и найти нужную запись
  • если он находится на пути к классам, вы можете использовать структуру ресурсов, подобную весенней, где вы можете указать classpath:log4j.xml.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...