我有一个Maven项目,我试图将其打包为战争和罐子。作为我的应用程序/ servlet初始化的一部分(取决于我是运行jar还是战争),我需要读取一个名为server.ini
的文件。我已将文件放在src/main/resources/server.ini
中,并尝试加载它:
System.class.getResourceAsStream("server.ini");
但是,这总是导致null
。我做错了什么?
答案 0 :(得分:1)
server.ini
文件应位于资源目录的根目录中。
将webapp
放入http
,您可以通过classpath
将文件设为可用,但您需要在{{1}}上访问该文件,这意味着您应该将其放在资源中目录。
答案 1 :(得分:1)
很有可能web.xml
或context.xml
更适合您尝试做的事情,但是......
尝试将server.ini
放入WEB-INF/classes
,或执行this之类的操作。
答案 2 :(得分:1)
问题在于我使用的是具有非限定路径的System类加载器,因此期望在server.ini
包中找到我的java.lang
。
由于我的文件位于src/main/resources
,我应该使用当前类的类加载器,并使用绝对路径:
getClass().getResourceAsStream("/server.ini")
这适用于战争和罐子。
“Preferred way of loading resources in Java”问题对资源加载有很好的解释。