在调用 java main 方法之前,我有一个批处理文件来设置类路径,请参见下面的代码
SET CLASSPATH=%CLASSPATH%;libs/xyz1.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz2.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz3.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz4.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz5.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz6.jar
SET CLASSPATH=%CLASSPATH%;/resource
java -classpath %CLASSPATH% com.xyz.main
如果我将我的属性文件保存在资源文件夹中,它工作正常,但如果我将它留在根文件夹中,它就不起作用。
SET CLASSPATH=%CLASSPATH%;libs/xyz1.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz2.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz3.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz4.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz5.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz6.jar
java -classpath %CLASSPATH% com.xyz.main
上面的类路径设置不起作用我得到空指针异常
SET CLASSPATH=%CLASSPATH%;libs/xyz1.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz2.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz3.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz4.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz5.jar
SET CLASSPATH=%CLASSPATH%;libs/xyz6.jar
SET CLASSPATH=%CLASSPATH%;/
java -classpath %CLASSPATH% com.xyz.main
上面的类路径设置不起作用我得到相同的空指针异常。
我正在使用 java util 属性,如下所示。
InputStream inputStream = this.getClass().getResourceAsStream("/abc.properties");
getProperties().load(inputStream);
如果有人能帮我找到发生这种情况的原因,那就太好了。提前谢谢你。
最佳答案
调用 getResourceAsStream()
使 java 寻找可用于当前类加载器的资源,即可以在您的类路径中找到的资源。如果您想从文件系统读取文件,请改用 new
new FileInputStream("abc.properties")`。如果你想继续从资源中读取文件,你必须将它包含到你的类路径中,要么进入你的 jar 文件之一,要么作为一个单独的条目。
您甚至可以实现从类路径读取文件然后用在文件系统中找到的文件覆盖值的逻辑。
顺便说一句,看看jackarata configuration内置此功能的软件包。
关于属性文件的java类路径问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14941423/