读取jar/war文件中的maven.properties文件
有没有办法用Java读取jar/war文件中的文件(maven.properties
)的内容?当文件未使用时(在内存中),我需要从磁盘读取该文件。关于如何做到这一点有什么建议吗?
问候, 约翰-基斯
Is there a way to read the content of a file (maven.properties
) inside a jar/war file with Java? I need to read the file from disk, when it's not used (in memory). Any advise on how to do this?
Regards,
Johan-Kees
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
首先一件事:从技术上讲,它不是一个文件。 JAR / WAR 是一个文件,您要查找的是存档中的条目(也称为资源)。
因为它不是文件,所以您需要将其作为
InputStream
如果 JAR / WAR 位于
classpath,您可以执行
SomeClass.class.getResourceAsStream("/path/from/the/jar/to/maven.properties")
,其中SomeClass
是其中的任何类JAR/战争如果没有,您将必须像这样阅读 JAR / WAR:
现在您可能希望将
InputStream
加载到Properties
对象中:或者您可以将
InputStream
读取为字符串。 这样的库,这会容易得多Apache Commons / IO
Google Guava
One thing first: technically, it's not a file. The JAR / WAR is a file, what you are looking for is an entry within an archive (AKA a resource).
And because it's not a file, you will need to get it as an
InputStream
If the JAR / WAR is on the
classpath, you can do
SomeClass.class.getResourceAsStream("/path/from/the/jar/to/maven.properties")
, whereSomeClass
is any class inside that JAR / WARIf not, you will have to read the JAR / WAR like this:
Now you probably want to load the
InputStream
into aProperties
object:Or you can read the
InputStream
to a String. This is much easier if you use a library likeApache Commons / IO
Google Guava
这绝对是可能的,尽管在不知道您的具体情况的情况下很难具体地说。
WAR 和 JAR 文件基本上都是 .zip 文件,因此如果您知道包含所需 .properties 文件的文件的位置,则可以使用 ZipFile 并提取属性。
如果它是一个 JAR 文件,可能有一种更简单的方法:您可以将其添加到类路径中并使用以下内容加载属性:(
假设属性文件位于根包中)
This is definitely possible although without knowing your exact situation it's difficult to say specifically.
WAR and JAR files are basically .zip files, so if you have the location of the file containing the .properties file you want you can just open it up using ZipFile and extract the properties.
If it's a JAR file though, there may be an easier way: you could just add it to your classpath and load the properties using something like:
(assuming the properties file is in the root package)