带有属性文件的java类路径问题

时间:2013-02-18 16:58:52

标签: java batch-file classpath

在调用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 个答案:

答案 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