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

使用Singleton类无法从IntelliJ IDEA中的Properties文件中使用访问属性

邵子平
2023-03-14

我正在练习使用名为PropertyLoader的单例类从属性文件访问属性,但我的maven项目无法在参考资料中找到该文件,并给出空指针例外。

这是类代码。

import java.io.IOException;
import java.util.Properties;
import org.apache.log4j.Logger;

public class PropertyLoader {
    private static PropertyLoader instance = null;
    private Properties properties;
    private final static Logger LOGGER = Logger.getLogger(PropertyLoader.class.getName());


    protected PropertyLoader() throws IOException {
        //TODO: Fix problem with loading properties file below
        properties = new Properties();
        properties.load(PropertyLoader.class.getResourceAsStream("app.properties"));

    }

    public static PropertyLoader getInstance() {
        if(instance == null) {
            try {
                instance = new PropertyLoader();
            } catch (IOException ioe) {
                LOGGER.error("Error Occurred while creating Property Loader instance: " + ioe.getMessage());
            }
        }
        return instance;
    }

    public String getValue(String key) {
        LOGGER.info("Getting property value for: " + key);
        return properties.getProperty(key);
    }

}

错误我得到:

异常线程"main"java.lang.NullPointerExctive: inStream参数在java.base/java.util.Objects.requireNonNull(Objects.java:247)在java.base/java.util.Properties.load(Properties.java:404)在in.net.sudhir.evernote.client.batchjob.属性加载器为null。(oader.java:16)在in.net.sudhir.evernote.client.batchjob.属性oader.get实例(属性oader.java:23)在in.net.sudhir.evernote.client.batchjob.Evernote Client。(Evernote Client.java:51)在in.net.sudhir.evernote.client.batchjob.BatchProcess.main(BatchProcess.java:33)

以下是项目结构的屏幕截图。

IntelliJ IDEA中的项目结构

共有1个答案

林冥夜
2023-03-14
properties = new Properties();

try(InputStream inputStream = PropertyLoader.class.getClassLoader().getResourceAsStream("app.properties")) {
    if(inputStream == null)
        throw new FileNotFoundException("File not found in classpath");

    properties.load(inputStream);
}

注意:在构造函数中进行计算是不好的做法。最好创建一些加载资源文件的方法。

 类似资料:
  • 我想通过.properties文件配置bean字符串字段。但它并不替换值键,这意味着它回显“${value}”字符串。我的代码如下:

  • 问题内容: 我在我的应用程序中使用ArrayList。 我想知道从Singleton类初始化ArrayList的确切过程。 该数据将在其他一些活动中使用。 有人可以帮助了解Singleton课堂吗? 问题答案: 这是创建单例类的方法: 任何需要调用arrayList的地方都可以: 要将元素添加到数组,请使用: 要么

  • 我在google drive中创建了一个服务帐户,用于从服务器上传google drive中的文件,并在以后下载这些文件。但是当我试图获取文件夹的文件列表并获取这些文件的时,它返回了null。我检查了它的其他一些属性,除了文件名和文件ID之外,和都返回null。 有人能帮我获得吗?或者你能找出为什么我不能获得的问题。 下面是我尝试的一部分代码: 下面是一个输出

  • 如果有人能帮忙,那就太好了!

  • 我最近创建了一个新的AWS帐户(我们称之为“帐户a”),并在这个帐户中创建了一个S3 bucket(我们称之为“bucketa”),上传了一个文件foo.txt。根据来自internet的建议,我设置了我认为是最允许的桶策略(它应该允许任何用户进行任何类型的访问): 为什么帐户B不能访问bucketa,尽管它的桶策略非常允许?是否需要设置其他AWS帐户的公共访问权限? 注意:我已经排除了帐户B的.

  • 问题内容: 我有几个小时的问题,我尝试了在教程中找到的所有解决方案。很简单:我无法访问资源文件。我尝试打开已放入和的文件。 我有一个简单的Java项目,并且使用Maven(带有Eclipse作为IDE)和m2e插件。我想在Maven中使用具有不同配置文件的资源过滤功能,这是我的: 我在src / java / test中做了一个简单的测试: 因此,在Eclipse中,我运行了(在我的项目文件夹中的