Как читать имя свойства с пробелами в 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'
Вы можете сравнить это с вашим, насколько это необходимо, поскольку наше отображение похоже на одно и то же. Если вы ничего не видите, добавьте полный код, и я посмотрю