20

我正在尝试使用以下代码加载属性文件中存在的所有属性名称:

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

如果属性名称有空格,它只返回第一个单词..

谁能告诉我该怎么做?

4

4 回答 4

46

您可以转义属性文件中的空格,但我认为它会开始看起来很丑陋。

username=a
password=b
Parent\ file\ name=c
Child\ file\ name=d

你可能会更好地编写你自己的实现,split()或者indexOf()你想要避免任何未来的错误和/或头痛的任何东西。

于 2012-08-07T03:22:52.740 回答
6

从属性文件加载时,在Java.util.Properties、、、或空格字符是键/值分隔符。=:

下面是其详细的Javadocpublic void load(Reader reader)

键包含行中的所有字符,从第一个非空白字符开始,直到(但不包括)第一个未转义=:、 或除行终止符之外的空白字符。通过使用前面的反斜杠字符对它们进行转义,所有这些键终止字符都可以包含在键中。http://docs.oracle.com/javase/6/docs/api/

于 2012-08-07T04:20:31.510 回答
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", "`") + "|");

此方法适用于前导、内部和尾随空格。享受!

于 2017-11-22T01:27:10.780 回答
-4

对我来说似乎工作正常;这是我的代码:

   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'

您可以将其与您的设置进行比较,因为我们的显示似乎相同。如果您没有看到任何内容,请添加您的完整代码,我会看看

于 2012-08-07T03:22:44.517 回答