我有一个属性文件,该文件是这样的 -如何安全地读取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