我正在尝试使用以下代码加载属性文件中的所有属性名称:
for(Enumeration<String> en = (Enumeration<String>) prop.propertyNames();en.hasMoreElements();){
String key = (String)en.nextElement();
System.out.println("Property name is "+key);
}
但我的属性文件包含以下内容:
username=
password=
Parent file name=
Child file name =
运行代码后,我输出为:
username password Parent Child
如果属性名称有空格,则只返回第一个单词..
任何人都可以告诉我该怎么做?
答案 0 :(得分:37)
您可以转义属性文件中的空格,但我认为它看起来会非常难看。
username=a
password=b
Parent\ file\ name=c
Child\ file\ name=d
您最好使用split()
或indexOf()
或您心中想要的任何内容来编写自己的实现,以避免任何未来的错误和/或令人头疼的问题。
答案 1 :(得分:6)
从Java.util.Properties
,=
,:
或空格字符是从属性文件加载时的键/值分隔符。
下面是其public void load(Reader reader)
该键包含以第一个非空白字符开头的行中的所有字符,但不包括第一个未转义的
=
,:
或空白字符其他字符。比行终止者。所有这些密钥终止字符都可以通过使用前面的反斜杠字符转义它们来包含在密钥中。 http://docs.oracle.com/javase/6/docs/api/
答案 2 :(得分:0)
我就是这样做的:
public class PropHelper {
final static String PROPERTY_FILEPATH = "blah/blah.properties";
static String getPropertyWithSpaces(String property, String delimiter) {
try {
FileReader reader = new FileReader(PROPERTY_FILEPATH);
Properties propertiesObj = new Properties();
propertiesObj.load(reader);
return propertiesObj.getProperty(property).replaceAll(delimiter, "");
} catch (Exception ex) {
System.out.println("FATAL ERROR: " + ex.getMessage());
System.exit(1);
}
return null;
}
}
.properties 文件中的某处:
settings = ` ⚙ Settings `
这就是我所说的:
System.out.println("|" + PropHelper.getPropertyWithSpaces("settings", "`") + "|");
此方法适用于前导,内部和尾随空格。 享受!
答案 3 :(得分:-3)
这似乎对我来说很好;这是我的代码:
Properties prop = new Properties();
prop.setProperty("test1", "val1");
prop.setProperty("test number 2", "val number 2");
prop.setProperty("test 3", "val3");
prop.setProperty("test #4", "val #4");
for(Enumeration<String> en = (Enumeration<String>) prop.propertyNames();en.hasMoreElements();){
String key = (String)en.nextElement();
System.out.println("'" + key + "'='" + prop.getProperty(key) + "'");
}
输出:
'test 3'='val3'
'test number 2'='val number 2'
'test1'='val1'
'test #4'='val #4'
你可以将它与你的设置进行比较,因为我们的显示似乎是相同的。如果您没有看到任何内容,请添加完整代码,我将会看一下