Как читать имя свойства с пробелами в java

Я пытаюсь загрузить все имена свойств, присутствующие в файле свойств, используя приведенный ниже код:

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

Если имя свойства имеет пробелы, оно возвращает только первое слово.

Может ли кто-нибудь рассказать мне, как это сделать?

Ответы

Ответ 1

Вы можете избежать пробелов в вашем файле свойств, но я думаю, что это начнет выглядеть довольно уродливо.

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

Возможно, вам лучше написать собственную реализацию с помощью split() или indexOf() или что угодно ваше сердце желает избежать любых будущих ошибок и/или головных болей.

Ответ 2

В Java.util.Properties, =, :, или символ пробела являются ключ/значение разделителем при нагрузке из файла свойств.

Ниже приводится подробный Javadoc о его public void load(Reader reader)

Ключ содержит все символы в строке, начиная с первым, не пробелом и до, но не включая, первый незаменяемый =, :, или символ пробела, кроме конца строки. Все эти ключевые символы завершения могут быть включены в ключ, экранируя их с помощью предыдущего символа обратной косой черты. http://docs.oracle.com/javase/6/docs/api/

Ответ 3

Вот как я это делаю:

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", "`") + "|");

Этот метод работает с ведущими, внутренними и конечными пробелами. Наслаждайтесь!

Ответ 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'

Вы можете сравнить это с вашим, насколько это необходимо, поскольку наше отображение похоже на одно и то же. Если вы ничего не видите, добавьте полный код, и я посмотрю