【问题标题】:Null pointer exception while reading properties file读取属性文件时出现空指针异常
【发布时间】:2012-05-13 21:31:24
【问题描述】:
propsdatabase = new Properties();
InputStream dbin = getClass().getResourceAsStream("/properties/database.properties");
propsdatabase.load(dbin);

我正在通过名为“properties”的文件夹中名为“database.properties”的属性文件读取我的数据库连接详细信息。就在根目录下面。

在 Eclipse 中导出 jar 时,代码运行良好。

但我使用 IntelliJ 中的 Maven 项目来获取 jar 。它会抛出 NUll 指针异常。

由于 dbin 的值为 NULL。(我也打印并检查了)。

我断定读取文件的路径无法识别。

现在 IntelliJ 一切正常。

在 Eclipse 中导出为 jar 时,虽然 jar 包含属性文件夹,但未检测到 IT。请帮忙

【问题讨论】:

  • 看起来您的属性文件不在您的类路径中(在这种情况下在您的 jar 中)
  • 是的..没错。任何想法如何克服这个
  • intellij使用的jar文件中的文件/properties/database.properties是吗?
  • How_do_I_add_resources_to_my_JAR maven.apache.org/guides/getting-started/… ???
  • 将文件移动到 $rootproject/src/main/resources/properties/database.properties

标签: java intellij-idea maven-3


【解决方案1】:

getResourceAsStream 返回 null 的原因是 /properties/database.properties 文件不在 Maven 类路径中。

将你的属性文件夹移动到/src/main/resources文件夹下,当Maven创建一个jar文件时,/properties/database.properties资源将被包含,你将停止获取NPE。

【讨论】:

    【解决方案2】:

    是的,getResourceAsStream 无疑返回 null。我怀疑您的 jar 文件不包含该文件。尝试运行:

    jar tvf yourfile.jar
    

    检查。接下来,检查 jar 文件的构建步骤。如果没有看到构建文件,很难说出问题所在,因此请编辑您的问题以包含该信息,如果您在查看步骤时没有跳出来。

    【讨论】:

    • Eclipse 中的 jar 适合我。但是对于我的队友来说,它仍然无法识别路径。 Eclipse中如何处理(导出为jar文件)
    【解决方案3】:

    您的 Maven 构建步骤是否在 jar 中包含属性文件?检查生成的 jar 文件。如果您不知道如何始终重命名并在末尾添加“.zip”并打开它。

    【讨论】:

    • 我发现我的jar里没有properties文件
    • 那是你的问题,你必须在构建 jar 文件时包含该文件(或所有 *.properties 文件或其他东西)。
    • 必须在您的 maven 构建中添加类似的内容:src**/*.properties
    • 当然 .. 在 maven + IntelliJ 中,我将我的属性放在资源文件夹中。效果很好
    • 好吧,这是另一种方式,但很难将文件复制回非 maven 构建,例如在 eclipse 中运行。
    【解决方案4】:

    您可以尝试使用路径和 FileInputStream 读取属性文件:

    Properties properties = new Properties();
    FileInputStream input = null;
    try {
       input = new FileInputStream(new File(CONFIGURATION_FILE));
       properties.load(input);
    }catch(...){...}
    

    【讨论】:

    • 嗨,Daniel ... 这只有在我提供 CONFIGURATION_FILE = "C://...//database.properties" 时才有效。它需要属性的硬编码路径。
    • 你是对的,我虽然你想在 jar 之外拥有属性文件。正如 Guillaume Polet 和 Andrew Newdigate 指出的那样,解决方案是将 database.properties 移动到 src/main/resources
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    相关资源
    最近更新 更多