Прочитайте файл maven.properties внутри файла jar / war - PullRequest
1 голос
/ 11 марта 2011

Есть ли способ прочитать содержимое файла (maven.properties) внутри файла jar / war с помощью Java?Мне нужно прочитать файл с диска, когда он не используется (в памяти).Любой совет, как это сделать?

С уважением, Йохан-Кис

Ответы [ 3 ]

8 голосов
/ 11 марта 2011
String path = "META-INF/maven/pom.properties";

Properties prop = new Properties();
InputStream in = ClassLoader.getSystemResourceAsStream(path );
try {
  prop.load(in);
} 
catch (Exception e) {

} finally {
    try { in.close(); } 
    catch (Exception ex){}
}
System.out.println("maven properties " + prop);
5 голосов
/ 11 марта 2011

Сначала одно: технически это не файл.JAR / WAR - это файл, который вы ищете, это запись в архиве (AKA ресурс).

И поскольку это не файл, вам нужно получить его как InputStream

  1. Если JAR / WAR находится на пути к классам, вы можете сделать SomeClass.class.getResourceAsStream("/path/from/the/jar/to/maven.properties"), где SomeClass - любой класс внутри этого JAR / WAR

    // these are equivalent:
    SomeClass.class.getResourceAsStream("/abc/def");
    SomeClass.class.getClassLoader().getResourceAsStream("abc/def");
    // note the missing slash in the second version
    
  2. Если нет, вам придется читать JAR / WAR следующим образом:

    JarFile jarFile = new JarFile(file);
    InputStream inputStream =
        jarFile.getInputStream(jarFile.getEntry("path/to/maven.properties"));
    

Теперь вы, вероятно, захотите загрузить InputStream вProperties объект:

Properties props = new Properties();
// or: Properties props = System.getProperties();
props.load(inputStream);

Или вы можете прочитать InputStream в строку.Это гораздо проще, если вы используете библиотеку типа

1 голос
/ 11 марта 2011

Это определенно возможно, хотя, не зная вашей конкретной ситуации, сложно сказать конкретно.

Файлы WAR и JAR - это, в основном, файлы .zip, поэтому, если у вас есть местоположение файла, содержащего нужный файл .properties, вы можете просто открыть его с помощью ZipFile и извлечь свойства.

Если это файл JAR, возможно, есть более простой способ: вы можете просто добавить его в путь к классам и загрузить свойства, используя что-то вроде:

SomeClass.class.getClassLoader().getResourceAsStream("maven.properties"); 

(при условии, что файл свойств находится в корневом пакете)

...