Прочитайте файл maven.properties внутри файла jar/war

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

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

3 ответа

Решение

Сначала одно: технически это не файл. 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 в строку. Это намного проще, если вы используете библиотеку, как

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);

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

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

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

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

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

Другие вопросы по тегам