属性文件位置是WEB-INF/classes/auth.properties.
我不能使用特定于JSF的方法(使用ExternalContext),因为我需要服务模块中的属性文件,该模块不依赖于Web模块.
我已经试过了
MyService.class.getClassLoader().getResourceAsStream("/WEB-INF/classes/auth.properties");
Run Code Online (Sandbox Code Playgroud)
但它回来了null.
我也试过阅读它,FileInputStream但它需要完整的路径是不可接受的.
有任何想法吗?
Bal*_*usC 52
几点说明:
你应该更喜欢ClassLoader所返回的Thread#getContextClassLoader().
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
Run Code Online (Sandbox Code Playgroud)
这将返回可访问所有资源的最基本类加载器.该Class#getClassLoader()会只返回类的(子)类加载器的问题,这可能本身并不访问所需的资源.它总是在具有单个类加载器的环境中工作,但并不总是在具有复杂的类加载器层次结构的环境中工作,如webapps.
该/WEB-INF文件夹不在类路径的根目录中.该/WEB-INF/classes文件夹是.所以你需要加载相对于它的属性文件.
classLoader.getResourceAsStream("/auth.properties");
Run Code Online (Sandbox Code Playgroud)
如果您选择使用Thread#getContextClassLoader(),请删除前导/.
ExternalContext#getResourceAsStream()使用ServletContext#getResourceAsStream()"引擎盖" 的JSF特定的只返回来自webcontent(/WEB-INF文件夹所在的位置)的资源,而不是来自类路径.
试试这个:
MyService.class.getClassLoader().getResourceAsStream("/auth.properties");
Run Code Online (Sandbox Code Playgroud)
读取getResourceAsStream类路径上具有外观的文件以查找要加载的资源.由于classes目录位于webapp的类路径中,因此引用该文件/auth.properties应该可行.
小智 5
ResourceBundle(http://download.oracle.com/javase/6/docs/api/java/util/ResourceBundle.html)通过属性文件的相对/ absotule路径解决了大多数问题.
它使用Resource类并将其指向Dummy Class以引用属性文件.
例如:
使用以下代码:
ResourceBundle.getBundle( "com.example.com.MAINProperties")的getProperty( "mail.host")
就是这样.无需InputStreams.
PD Apache Commons有一个名为Apache Commons Configuration的库,它具有许多功能(可重新加载的文件,多种域类型),可以与上述功能结合使用.
| 归档时间: |
|
| 查看次数: |
66059 次 |
| 最近记录: |