Вот быстрый и грязный способ сделать это:
String propFile = "/path/to/file";
Properties props = new Properties();
/*set some properties here*/
Properties tmp = new Properties() {
@Override
public Set<Object> keySet()
{
return Collections.unmodifiableSet(new TreeSet<Object>(super.keySet()));
}
};
tmp.putAll(props);
try {
FileOutputStream xmlStream = new FileOutputStream(propFile);
/*this comes out SORTED! */
tmp.storeToXML(xmlStream,"");
} catch (IOException e) {
e.printStackTrace();
}
Вот предостережения:
- Свойства tmp (анонимный
подкласс) не выполняет
договор о недвижимости.
Например, если вы получили keySet
и попытались удалить из него элемент, возникнет исключение. Так что не позволяйте экземплярам этого подкласса убегать! В приведенном выше фрагменте вы никогда не передаете его другому объекту или не возвращаете его вызывающей стороне, которая имеет законное ожидание того, что она выполнит контракт свойств, поэтому она безопасна.
- Реализация
Properties.storeToXML может измениться,
заставляя его игнорировать набор ключей
способ.
Например, будущий выпуск, или OpenJDK, мог бы использовать keys()
метод Hashtable
вместо keySet
. Это одна из причин, почему классы должны всегда документировать свое «самоиспользование» (Эффективный элемент Java 15). Однако в этом случае худшее, что может произойти, - это то, что ваш вывод вернется к несортированному.
- Помните, что хранилище свойств
методы игнорируют любые «по умолчанию»
записи.