Прочитайте файл maven.properties внутри файла jar/war
Есть ли способ прочитать содержимое файла (maven.properties
) внутри файла jar/war с Java? Мне нужно прочитать файл с диска, когда он не используется (в памяти). Любой совет, как это сделать?
С уважением, Йохан-Кис
3 ответа
Сначала одно: технически это не файл. JAR / WAR - это файл, который вы ищете, это запись в архиве (AKA ресурс).
И поскольку это не файл, вам необходимо получить его как InputStream
Если 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
Если нет, вам придется читать 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 str = IOUtils.toString(inputStream)
String str = CharStreams.toString(new InputStreamReader(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");
(при условии, что файл свойств находится в корневом пакете)