ejemplo - set border java
¿Cómo puedo escribir las propiedades de Java en un orden definido? (3)
Estoy usando el método de almacenamiento (Writer, String) de java.util.Properties para almacenar las propiedades. En el archivo de texto resultante, las propiedades se almacenan en un orden aleatorio.
Esto es lo que estoy haciendo:
Properties properties = createProperties();
properties.store(new FileWriter(file), null);
¿Cómo puedo asegurarme de que las propiedades se escriban en orden alfabético o en el orden en que se agregaron las propiedades?
Espero una solución más simple que "crear manualmente el archivo de propiedades".
Consulte https://github.com/etiennestuder/java-ordered-properties para obtener una implementación completa que permita leer / escribir archivos de propiedades en un orden bien definido.
OrderedProperties properties = new OrderedProperties();
properties.load(new FileInputStream(new File("~/some.properties")));
La solución de Steve McLeod no funcionó cuando se trataba de clasificar sin distinción entre mayúsculas y minúsculas.
Esto es lo que se me ocurrió
Properties newProperties = new Properties() {
private static final long serialVersionUID = 4112578634029874840L;
@Override
public synchronized Enumeration<Object> keys() {
Comparator<Object> byCaseInsensitiveString = Comparator.comparing(Object::toString,
String.CASE_INSENSITIVE_ORDER);
Supplier<TreeSet<Object>> supplier = () -> new TreeSet<>(byCaseInsensitiveString);
TreeSet<Object> sortedSet = super.keySet().stream()
.collect(Collectors.toCollection(supplier));
return Collections.enumeration(sortedSet);
}
};
// propertyMap is a simple LinkedHashMap<String,String>
newProperties.putAll(propertyMap);
File file = new File(filepath);
try (FileOutputStream fileOutputStream = new FileOutputStream(file, false)) {
newProperties.store(fileOutputStream, null);
}
Según la sugerencia de "The New Idiot''s", esta se almacena en orden alfabético de claves.
Properties tmp = new Properties() {
@Override
public synchronized Enumeration<Object> keys() {
return Collections.enumeration(new TreeSet<Object>(super.keySet()));
}
};
tmp.putAll(properties);
tmp.store(new FileWriter(file), null);