2

在调用 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);

如果有人可以帮助我找到为什么会发生这种情况,那就太好了。先感谢您。

4

4 回答 4

4

调用getResourceAsStream()使 java 寻找可用于当前类加载器的资源,即可以在您的类路径中找到的资源。如果要从文件系统读取文件,请改用newnew FileInputStream("abc.properties")`。如果您想继续从资源中读取文件,则必须将其包含在您的类路径中,或者包含在您的 jar 文件之一中,或者作为单独的条目。

您甚至可以实现从类路径读取文件的逻辑,然后用在文件系统中找到的文件覆盖这些值。

顺便说一句,看看内置此功能的jackarata 配置包。

于 2013-02-18T17:04:47.773 回答
2

您需要在 CLASSPATH 中包含“./”。您实际上是在告诉 JVM 将其排除在外。

于 2013-02-18T17:01:13.560 回答
2

这是因为从当前目录检查类路径.会做得最好
即使你没有在资源文件夹中包含你的属性文件并运行下面提到的 java 程序,它也会完美地工作

java -cp .;%CLASSPATH% com.xyz.main

注意:cp 是类路径的简写

于 2013-02-18T17:04:59.273 回答
1

包括完整的类路径

java -classpath .;%CLASSPATH% com.xyz.main

您还可以设置多个规范参考以下链接, http://docs.oracle.com/javase/1.4.2/docs/tooldocs/windows/classpath.html

于 2013-02-20T17:28:57.500 回答