Я создал работу вокруг в случае, если кто-то нуждается в этой функции. Кроме того, вероятно, есть лучший способ сделать это, но это решение в настоящее время работает для меня.
Во-первых, установить PropertiesConfiguration разделитель на символ новой строки так:
PropertiesConfiguration config = new PropertiesConfiguration(configFile);
config.setListDelimiter('\n');
Затем вам нужно будет перебрать и обновить все свойства (установить формат):
Iterator<String> keys = config.getKeys();
while (keys.hasNext()) {
String key = keys.next();
config.setProperty(key,setPropertyFormatter(key, config.getProperty(key))) ;
}
используйте этот метод для форматирования данных списка значений (как показано выше):
private List<String> setPropertyFormatter(String key, Object list) {
List<String> tempProperties = new ArrayList<>();
Iterator<?> propertyIterator = PropertyConverter.toIterator(list, '\n');;
String indent = new String(new char[key.length() + 1]).replace('\0', ' ');
Boolean firstIteration = true;
while (propertyIterator.hasNext()) {
String value = propertyIterator.next().toString();
Boolean lastIteration = !propertyIterator.hasNext();
if(firstIteration && lastIteration) {
tempProperties.add(value);
continue;
}
if(firstIteration) {
tempProperties.add(value + ",\\");
firstIteration = false;
continue;
}
if (lastIteration) {
tempProperties.add(indent + value);
continue;
}
tempProperties.add(indent + value + ",\\");
}
return tempProperties;
}
Затем i t будет почти правильным, за исключением того, что функция сохранения принимает двойную обратную косую черту, которая хранится в списке, и превращает ее в 4 обратных косая черта в файле! Поэтому вам нужно заменить их одним обратным слэшем. Я сделал это так:
try {
config.save(new File(filePath));
byte[] readIn = Files.readAllBytes(Paths.get(filePath));
String replacer = new String(readIn, StandardCharsets.UTF_8).replace("\\\\\\\\", "\\");
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath, false), "UTF-8"));
bw.write(replacer);
bw.close();
} catch (ConfigurationException | IOException e) {
e.printStackTrace();
}
Это невозможно при реализации текущей версии apache-commons-config – 6ton