Java类路径和配置文件

时间:2012-02-23 12:16:51

标签: java eclipse classpath

我在查找带有classpath的配置文件时遇到了一些麻烦。

我用:

InputStream stream = myclass.class.getResourceAsStream("properties.file");

properties.file位于config目录下。

使用eclipse运行程序时,它可以工作。 我刚刚在启动配置的类路径中添加了config文件夹。

但是如果我想像这样运行导出的jar:

java -jar -cp C:\project\lib;C:\project\config myclass.jar

我得到了很棒的java.lang.NullPointerException,因为它无法找到该文件。

这听起来很经典而且很愚蠢,但我找不到线索。 我不做的是什么?

由于

5 个答案:

答案 0 :(得分:2)

您应该使用类的绝对路径(如果您不想将属性文件放在jar中相对于类)

InputStream stream = myclass.class.getResourceAsStream("/properties.file");

或只是

InputStream stream = myclass.class.getClassLoader().getResourceAsStream("properties.file");

然后确保在运行jar时在类路径中指定包含此资源文件的dir的路径,以便systemclassloader能够找到此资源。

答案 1 :(得分:1)

为了让您的已导出的Jar Files访问您的resources

  1. Right Click您的项目位于 Eclipse
  2. 选择New -> Source Folder,现在将此Source Folder命名为resources
  3. 现在通过config folder
  4. 手动将File System添加到此文件夹
  5. 现在返回您的 Eclipse Right Click您的项目并选择Refresh
  6. 现在可以在Project Tree内看到添加的文件夹。现在,为了访问配置文件夹的内容,请写下:

    InputStream stream = myclass.class.getResourceAsStream("/resources/config/properties.file");
    

答案 2 :(得分:0)

使用java -jar启动jar文件时,它会忽略-cp指定的类路径

见:

答案 3 :(得分:0)

如果您不想在jar中包含配置文件,可以将路径作为命令行参数传递给配置文件。

java -jar myclass.jar C:\project\config 

然后按绝对路径加载文件

public static void main(String[] args)
{
   String pathToConfig = args[1]; //or 0/2, check to see
   String configFilePath = pathToConfig  + "/properties.file";
   String[] lines = FileUtil.ReadLines(configFilePath);

}

但我建议反对它,因为你将很难部署。该文件必须存在于目标中,并且每次都必须以不同方式启动程序。

答案 4 :(得分:0)

如果您输入java -help,您会看到以下用途:

  

用法:java [-options] class [args ...]              (执行课程)
  或java [-options] -jar jarfile [args ...]              (执行jar文件)

因此,您可能需要按如下方式修复命令:

java -cp C:\project\lib;C:\project\config -jar myclass.jar

您还可以尝试以下操作:

java -classpath C:\project\lib;C:\project\config -jar myclass.jar

甚至在运行程序之前设置类路径:

set CLASSPATH=C:\project\lib;C:\project\config
java -jar myclass.jar