有没有办法用Java读取jar / war文件中的文件内容(maven.properties
)?我需要从磁盘读取文件,当它没有被使用时(在内存中)。有关如何做到这一点的任何建议吗?
此致 约翰-基斯
答案 0 :(得分:8)
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);
答案 1 :(得分:5)
首先要做的一件事:从技术上讲,它不是文件。 JAR / WAR是一个文件,您要查找的是存档中的条目(AKA是一个资源)。
由于它不是文件,因此您需要将其作为InputStream
如果JAR / WAR在
classpath,你可以做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));
答案 2 :(得分:1)
这绝对是可能的,虽然不知道你的确切情况但很难具体说明。
WAR和JAR文件基本上都是.zip文件,所以如果您拥有包含.properties文件的文件的位置,您可以使用ZipFile打开它并提取属性。
如果它是一个JAR文件,可能有一种更简单的方法:你可以将它添加到类路径并使用类似的东西加载属性:
SomeClass.class.getClassLoader().getResourceAsStream("maven.properties");
(假设属性文件位于根包中)