繁体   English   中英

Java类路径和配置文件

[英]Java classpath and config file

我在查找带有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因为它无法找到该文件。

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

谢谢

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

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

或者干脆

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

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

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

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

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

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

如果输入java -help您将看到以下USAGE:

用法: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

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

看到:

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

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

}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM