2012-02-23 119 views
4

我在使用类路径查找配置文件时遇到了一些麻烦。Java类路径和配置文件

我用:

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

的properties.file位于config目录下。

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

但是如果我要运行导出的罐子这样的:

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

我得到的哦精彩java.lang.NullPointerException,因为它无法找到该文件。

这听起来很经典和愚蠢,但我找不到线索。 eclipse做了什么,我不知道?

感谢

回答

1

为了让您的出口Jar Files访问您的resources

  1. Right Click您的项目在Eclipse的
  2. 选择New -> Source Folder,现在命名此Source Folder作为,说resources
  3. 现在手动通过File System
  4. 添加config folder到这个文件夹现在回到你的EclipseRight Click你的项目和选择Refresh

现在您可以在Project Tree中看到添加的文件夹。现在,为了访问您的配置文件夹的内容写:

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

是的,这将工作(做这样的事情之前),但后来作为源文件夹,它会被添加到构建路径中,然后打包到jar文件中。因此,如果我想更改属性文件中的参数,我会被删除,因为程序使用了jar中的参数:( – user1228291 2012-02-23 12:26:28

+0

@ user1228291:我猜,在您运行项目时,Eclipse会自动将它添加到您的类路径中,检查你的bin/classes文件夹,无论你的资源中有什么东西,文件夹将被添加到bin/classes文件夹。Ahha,现在我明白了,你是对的,好像是:-)但是提供绝对文件路径也不是一个好主意, 我猜。 – 2012-02-23 12:29:45

+0

试试这个http://stackoverflow.com/a/35058865/1533783 – 2016-01-28 10:45:50

0

如果您不想在您的罐子配置文件,您可以在路径传递到配置文件中的命令行争取您的应用程序。

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); 

} 

加载该文件,但我建议反对,因为你将有一个艰难的时间进行部署。该文件必须存在于目标中,并且每次都必须以不同的方式启动程序。

+0

是的,我同意你的看法。这就是为什么我想能够告诉Java“好的,在我用classpath告诉过的文件夹中查找properties.file”。这样它会查看config目录并找到该文件。 事实上,我甚至希望能够运行:java -jar myclass.jar my_properties_file,而java会浏览类路径中的每个文件夹并找到它。 – user1228291 2012-02-23 12:45:06

2

您应该使用绝对路径类(如果你不不希望把属性文件中的jar相对你的类)

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

或者干脆

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

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

0

如果键入java -help你会看到下面的用法:

用法:JAVA [-options]类[参数...] (执行类)
或Java [-options] -jar jar文件[参数...] (执行一个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