Решение hoat4 очень элегантно и просто. Он работает для всех нормальных ini-файлов. Однако я встречал многих, у которых в ключе присутствовали неэкранированные пробелы .
Чтобы решить эту проблему, я загрузил и изменил копию java.util.Properties
. Хотя это немного неортодоксально и краткосрочно, на самом деле модификации состояли из нескольких строк и были довольно простыми. Я внесу предложение сообществу JDK о внесении изменений.
Добавив внутреннюю переменную класса:
private boolean _spaceCharOn = false;
Я контролирую обработку, связанную со сканированием точки разделения ключ / значение. Я заменил код поиска пробелов небольшим частным методом, который возвращает логическое значение в зависимости от состояния указанной выше переменной.
private boolean isSpaceSeparator(char c) {
if (_spaceCharOn) {
return (c == ' ' || c == '\t' || c == '\f');
} else {
return (c == '\t' || c == '\f');
}
}
Этот метод используется в двух местах частного метода load0(...)
.
Существует также общедоступный метод для его включения, но было бы лучше использовать исходную версию, Properties
если разделитель пробелов не является проблемой для вашего приложения.
Если есть интерес, я готов выложить код в свой IniFile.java
файл. Он работает с любой версией Properties
.