【发布时间】:2018-05-23 09:14:25
【问题描述】:
在下面的代码中,getProperty() 方法总是返回 null,即使我为
添加了默认值loadNumberOfAccounts();
所以它不是 null,下一个使用 getProperty() 的方法将返回 null。 存储属性完美无缺。
prop.get
也返回 null。
public class AccountList {
private static Properties prop = new Properties();
private static final File DIRECTORY = Constants.DIRECTORY;
private static final File BANK_ACCOUNTS_FILE = new
File(DIRECTORY.getName() + File.separator + "Accounts.txt");
private static final FileOutputStream WRITER = assignWriter();
private static final FileInputStream READER = assignReader();
private static final List<Bank> ACCOUNT_LIST = new ArrayList<>();
private static final String NUMBER_OF_ACCOUNTS = "NumberOfAccounts";
private static final String BANK_ACCOUNT_NAME = "BankAccount";
private static final String SEPERATOR = "-";
private static int accounts = 0;
static {
BANK_ACCOUNTS_FILE.setReadOnly();
}
private static FileInputStream assignReader() {
FileInputStream tmp = null;
try {
tmp = new FileInputStream(BANK_ACCOUNTS_FILE);
} catch (FileNotFoundException e) {
EvaluateErrors.eveluateException(e);
}
if (tmp == null) {
EvaluateErrors.eveluateException(new NullPointerException());
}
return tmp;
}
private static FileOutputStream assignWriter() {
BANK_ACCOUNTS_FILE.setWritable(true);
FileOutputStream tmp = null;
try {
tmp = new FileOutputStream(BANK_ACCOUNTS_FILE);
} catch (IOException e) {
EvaluateErrors.eveluateException(e);
}
if (tmp == null) {
EvaluateErrors.eveluateException(new NullPointerException());
}
BANK_ACCOUNTS_FILE.setReadOnly();
return tmp;
}
public static void loadAccounts() {
try {
prop.load(READER);
} catch (IOException e) {
EvaluateErrors.eveluateException(e);
}
loadNumberOfAccounts();
loadAccountsList();
for (Bank object : ACCOUNT_LIST) { //to try and debug
System.out.println(object.getName());
System.out.println(object.getId());
System.out.println(object.getBankAccountFunds());
System.out.println(object.getOverdrawFee());
}
}
public static void saveAccounts() {
BANK_ACCOUNTS_FILE.setWritable(true);
saveAccountsList();
saveNumberOfAccounts();
try {
prop.store(WRITER, null);
} catch (IOException e) {
EvaluateErrors.eveluateException(e);
} finally {
CloseLogs();
BANK_ACCOUNTS_FILE.setReadOnly();
}
private static void loadNumberOfAccounts() {
String string = prop.getProperty(NUMBER_OF_ACCOUNTS);
System.out.println(string); // always null
try {
accounts = Integer.parseInt(string);
} catch (NumberFormatException e) { // this exception is thrown
// because string is always null.
EvaluateErrors.eveluateException(e);
}
// more methods ...
我确定答案很简单,我只是错过了它,但我已经用尽了所有选项。
Accounts.txt 看起来像这样
NumberOfAccounts=1
OtherStoredProperties=etc
etc...
更新
我发现了这个错误,但不知道为什么会发生,也不知道如何修复它。
事实证明,如果我改变了
private static final WRITER = assignWriter();
到
WRITER = null
getProperty() 方法完美无缺。我在尝试存储属性文件时显然会得到一个NullPointerException,因为WRITER = null,但是,这是一个简单的修复。我不明白的是,为什么分配WRITER 会导致getProperty() 方法只返回null?
【问题讨论】:
-
您确定加载属性文件不会失败吗?您正在使用名为
EvaluateErrors.eveluateException(e)的东西来捕获IOException,但仍不清楚。如果你只是为了调试而使用e.printStacktrace()会发生什么? -
@AKSW
EvaluateErrors.eveluateException()显示一个 Jdialog 说您的程序已崩溃,它强制关闭程序并将 stackTrace 写入我的 logs.txt 文件中。但是我只是用e.printStacktrace()尝试过,除了NumberFormatException之外,它没有发现异常
标签: java properties getproperty getproperties