我有一個屬性文件,該文件是這樣的 -如何安全地讀取Java中的屬性文件?
[email protected]
[email protected]
# can be separated by comma
whichServer=UserServer,GuestServer
maxTestInSec=120
numberOfUsers=1000
現在我讀的Java這樣這個屬性文件,如果一切都正確設置它的工作原理 -
private static final Properties prop = new Properties();
private static String emailFrom;
private static String emailTo;
private static List<String> whichServer;
private static String maxTestInSec;
private static String numberOfUsers;
public static void main(String[] args) {
readConfig(args);
}
private void readConfig(String[] args) throws FileNotFoundException, IOException {
if (!TestUtils.isEmpty(args) && args.length != 0) {
prop.load(new FileInputStream(args[0]));
} else {
prop.load(TestTask.class.getClassLoader().getResourceAsStream("config.properties"));
}
emailFrom = prop.getProperty("emailFrom").trim();
emailTo = prop.getProperty("emailTo").trim();
whichServer = Arrays.asList(prop.getProperty("whichServer").trim().split(","));
maxTestInSec = prop.getProperty("maxTestInSec").trim();
numberOfUsers = prop.getProperty("numberOfUsers").trim();
}
問題陳述: -
我需要確保如果任何屬性值丟失,那麼我想使用默認值,如果有任何機會該屬性被註釋掉,那麼也我想使用默認值,但我會記錄一條警告消息,說明屬性丟失或空,所以使用默認值。我試圖覆蓋所有角落的情況下讀取文件 -
- 現在讓我們假設,如果我不指定值來任我在上面的文件屬性,然後我想用默認值屬性我沒有提供並記錄爲警告,指出沒有爲此屬性提供值,因此使用默認值。例如:比方說,如果我沒有爲
emailFrom
字段中提供任何值,那麼我想用默認值[email protected]
爲和他人類似的事情。所有屬性的默認值是:
whichServer = UserServer的
maxTestInSec = 30
numberOfUsers = 500
- 此外,如果任何的屬性被註釋掉那麼上面的代碼將通過NPE異常。我如何在該場景中使用默認值?
我應該開始使用命令行解析器呢?什麼是處理這些東西最好和乾淨的方式?
我不希望有很多的if塊添加一張支票,然後設置的默認值。
感謝您的建議。有了這種方法,如果我的配置文件中有20個屬性,那麼這意味着我需要有40個如果塊?有沒有其他乾淨的方式來做到這一點? – john
您可以使用下面的枚舉來獲取所有屬性名稱。 Enumeration en = prop.propertyNames(); (en.hasMoreElements()) { System.out.println(en.nextElement()); } 並確保您的所有屬性都存在。 – robin