我有以下代码尝试读取属性文件:
Properties prop = new Properties();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
InputStream stream = loader.getResourceAsStream("myProp.properties");
prop.load(stream);
Run Code Online (Sandbox Code Playgroud)
我在最后一行得到一个例外.特别:
Exception in thread "main" java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:418)
at java.util.Properties.load0(Properties.java:337)
at java.util.Properties.load(Properties.java:325)
at Assignment1.BaseStation.readPropertyFile(BaseStation.java:46)
at Assignment1.BaseStation.main(BaseStation.java:87)
Run Code Online (Sandbox Code Playgroud)
谢谢,尼科斯
这是一个简单的问题,我找不到结论性答案.
我可以从config.properties文件加载字符串属性(例如:对预准备语句的查询).假设我想要连接的数据库连接.
如果我想从文件中获取此信息,我可以在类中执行以下操作:
private static final ResourceBundle BUNDLE = ResourceBundle.getBundle("scheduler");
private static final String DRIVER = BUNDLE.getString("bd.driver");
private static final String CONNECTIONURL =BUNDLE.getString("bd.url");
....
Run Code Online (Sandbox Code Playgroud)
但相反,我已经看到许多人建议使用而不是属性,然后我将不得不做同样的事情(如果我想保持类静态,没有一个合适的构造函数):
static {
prop = new Properties();
try { prop.load(ReportsDB.class.getClassLoader().getResourceAsStream("config.properties"));
} catch (IOException ex) {
Logger.getLogger(ReportsDB.class.getName()).log(Level.SEVERE, null, ex);
throw new RuntimeException(ex);
}
}
private static final String DRIVER = prop.getProperty("bd.driver");
private static final String CONNECTIONURL = prop.getProperty("bd.url");
Run Code Online (Sandbox Code Playgroud)
那么,为什么我不应该使用ResourceBundle而不是Properties当第二个更详细?