当前位置: 首页 > 知识库问答 >
问题:

从Jboss Fuse/Karaf中的文件系统加载属性文件将抛出Nullpointer

蓬祺
2023-03-14

代码能够很好地加载包中的属性,但现在我试图从项目本身排除这些属性,并且代码抛出了一个nullPointer-exception。

该路径在我的开发计算机上正确解析为

C:\users\someone\devstudio\runtimes\jboss-fuse-6.3.0.redhat-135\etc\bean.properties

public static Properties getProperties(String location) {
    Properties prop = new Properties();
    InputStream input = null;

    try {
        input = PropertyLoader.class.getClassLoader().getResourceAsStream(location);
        prop.load(input);
    } catch (IOException ex) {
        log.error("Error loading properties file from: " + location, ex);
        return null;
    } finally {
        if (input != null) {
            try {
                input.close();
            } catch (IOException e) {
                log.error(e);
            }
        }
    }
    return prop;
}

public static Properties getPropertiesFromFilesystem(String location) {
    Properties prop = new Properties();
    InputStream input = null;

    try {
        input = new FileInputStream(location);
        prop.load(input);
    } catch (IOException ex) {
        log.error("Error loading properties file from: " + location, ex);
        return null;
    } finally {
        if (input != null) {
            try {
                input.close();
            } catch (IOException e) {
                log.error(e);
            }
        }
    }
    return prop;
}

java.lang.NullPointerException在java.util.properties$LineReader.ReadLine(properties.java:434)[:1.8.0_91]在java.util.Properties.Load0(properties.java:353)[:1.8.0_91]在java.util.Properties.Load(properties.java:341)[:1.8.0_91]在java.util.Properties.Load(properties.java:341)[:1.8.0_91]在com.mycompany.util.PropertyLoader.getPropertiesg.apache.camel.camel-core:2.17.0.redhat-630135]位于org.apache.camel.processor.pipeline.process(pipeline.java:121)[231:org.apache.camel.camel-core:2.17.0.redhat-630135]位于org.apache.camel.processor.pipeline.process(pipeline.java:83)[231:org.apache.camel.camel.camel-core:2.17.0.redhat-630135]位于

如有任何帮助,我们将不胜感激。

共有1个答案

薛经艺
2023-03-14

别那样做。你在找麻烦。

  1. 以OSGi方式加载属性(使用.cfg作为扩展名和blueprintproperty-placeholderbean)
    如果文件发生更改(如果您愿意),您还可以获得通知
  2. 即使只使用静态方法,也要将它们注入到bean中。
    除非您非常清楚自己在做什么,否则不要将托管bean与非托管静态代码混合使用。

如果某些“静态”代码需要属性,则意味着它是有状态的,并且这个类值得实例化为bean。

 类似资料:
  • 我在尝试添加

  • 我需要加载不同服务器上存在的类文件,并在类文件中执行方法。我不想使用超文本传输协议或RMI,但想应用这种方法。我正在看URLClassLoader,但没有得到任何地方。有人能给我一个从不同服务器加载类的例子吗?

  • 问题内容: 我需要读取埋在我的包结构中的属性文件。 我已经尝试了一切,但无法解决。 最后,我的代码将在servlet容器中运行,但是我不想依赖任何容器。我写了JUnit测试用例,它需要在两个方面都能工作。 问题答案: 从包中的类加载属性时,可以使用 (添加所有必要的异常处理)。 如果你的类不在该程序包中,则需要稍微不同地获取InputStream: 相对路径(那些没有前导“/”)中该资源将相对于它

  • 我在蓝图中使用cm:property-placeholder来加载配置文件: 我可以将值设置为bean,例如${abc}。 如何从java访问配置的任何其他属性? 我计划添加属性列表:prop1=11 prop2=22...propn=nn 由于数量不同,我无法在蓝图中添加所有内容。 谢谢你,维克多

  • 问题内容: 我的项目设定 我有以下项目设置: 在我的代码中,我使用相对URL引用图像。 问题 如果我在目录中使用以下命令运行此程序: 然后一切正常,Java能够找到该图像。 现在,我的问题是,我需要能够从其他目录运行该程序。 该程序已执行,但是现在所有相对URL不再起作用。 我需要的 如何计算program.jar文件的执行位置,以便可以将相对URL更改为绝对URL? 问题答案: 如果可能的话,我

  • 问题内容: 我有一个简单的程序,需要显示图像。我知道如何从Eclipse运行代码,也知道如何从JAR文件运行,但是我想要一个在两种情况下都可以使用的解决方案。 Eclipse项目就是这样的: 可在Eclipse中运行的代码段: 适用于JAR的文件(全部在一个JAR文件中): 为了使单个代码在两种情况下都能正常工作,我需要更改什么? 问题答案: 将文件夹放在文件夹中,Eclipse会将图像复制到目标