java - 无法使用单例类在 IntelliJ IDEA 中使用属性文件中的访问属性
问题描述
我正在练习使用名为 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.NullPointerException: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.PropertyLoader.(PropertyLoader.java:16) 在 in.net.sudhir.evernote.client.batchjob.PropertyLoader.getInstance(PropertyLoader.java:23) 在in.net.sudhir.evernote.client.batchjob.EvernoteClient.(EvernoteClient.java:51) 在 in.net.sudhir.evernote.client.batchjob.BatchProcess.main(BatchProcess.java:33)
这是项目结构的屏幕截图。
解决方案
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);
}
注意:在构造函数中进行计算是不好的做法。最好创建一些加载资源文件的方法。
推荐阅读
- java - (Spring-Boot/CXF/JAXRS)@GET 以 200 正确响应,@POST 以 404 响应,尽管配置相同
- javascript - FlaskWTF 如何将 CSRF 令牌发送到 Vue 前端
- json - Swift 中的本地主机 API 请求
- android - Android Studio Equivalate to CSS display grid
- python - 关于在 Python 中的某些线程之间共享变量
- html - 在角度 7 上折叠响应式导航栏
- java - Android - 改造 - 如何发送具有多个值的字符串列表
- css - 更改搜索栏中的背景颜色
- php - 用 php 启动 selenium webdriver
- flash - 在 Flash CS6 中编辑具有嵌入字体的 SWF 文件