我在查找带有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
,因为它无法找到该文件。
这听起来很经典而且很愚蠢,但我找不到线索。 我不做的是什么?
由于
答案 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
,
Right Click
您的项目位于 Eclipse New -> Source Folder
,现在将此Source Folder
命名为resources
config folder
File System
添加到此文件夹
Right Click
您的项目并选择Refresh
现在可以在Project Tree
内看到添加的文件夹。现在,为了访问配置文件夹的内容,请写下:
InputStream stream = myclass.class.getResourceAsStream("/resources/config/properties.file");
答案 2 :(得分:0)
答案 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