在调用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);
如果有人能帮我找到,为什么会这样,那将是非常好的。提前谢谢你。
答案 0 :(得分:4)
调用getResourceAsStream()
会导致java查找可用于当前类加载器的资源,即可以在类路径中找到的资源。如果要从文件系统中读取文件,请使用new
新的FileInputStream(“abc.properties”)`。如果要继续从资源中读取文件,则必须将其包含在类路径中,放入一个jar文件中或作为单独的条目。
您甚至可以实现从类路径读取文件的逻辑,然后使用文件系统中找到的文件覆盖这些值。
BTW查看内置此功能的jackarata configuration软件包。
答案 1 :(得分:2)
您需要在CLASSPATH中包含“./”。您实际上是在告诉JVM将其排除。
答案 2 :(得分:2)
这是因为从当前目录.
检查类路径会做得最好
即使您没有在资源文件夹中包含属性文件并运行java程序,如下所述,它也可以完美地运行
java -cp .;%CLASSPATH% com.xyz.main
注意:cp是classpath的简写
答案 3 :(得分:1)
包含完整的课程路径
java -classpath。;%CLASSPATH%com.xyz.main
您还可以设置多个规格参考以下链接, http://docs.oracle.com/javase/1.4.2/docs/tooldocs/windows/classpath.html