Решение 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.