ruta relativa recorrer leer ejemplo archivos archivo java resourcebundle

relativa - recorrer properties java



¿Cómo especifico valores en un archivo de propiedades para que se puedan recuperar utilizando ResourceBundle#getStringArray? (9)

Estoy tratando de usar ResourceBundle#getStringArray para recuperar un String[] de un archivo de propiedades. La descripción de este método en la documentación dice:

Obtiene una matriz de cadenas para la clave dada de este paquete de recursos o uno de sus padres.

Sin embargo, he intentado almacenar los valores en el archivo de propiedades como múltiples pares clave / valor individuales:

key=value1 key=value2 key=value3

y como una lista delimitada por comas:

key=value1,value2,value3

pero ninguno de estos es recuperable usando ResourceBundle#getStringArray .

¿Cómo se representa un conjunto de pares clave / valor en un archivo de propiedades para que se puedan recuperar utilizando ResourceBundle#getStringArray ?


No creo que esto sea posible con ResourceBundles cargado desde un archivo de propiedades. PropertyResourceBundle aprovecha la clase Properties para cargar el archivo de propiedades. La clase Propiedades carga un archivo de propiedades como un conjunto de entradas String-> String map y no admite extraer valores String [].

Llamar a ResourceBundle.getStringArray simplemente llama a ResourceBundle.getObject, lanzando el resultado a String []. Dado que PropertyResourceBundle simplemente entrega esto a la instancia de Propiedades que cargó desde el archivo, nunca podrá hacer que funcione con el stock actual PropertyResourceBundle.


Umm, parece que este es un problema común, de los hilos aquí y aquí .

Parece que no utilizas el método y analizas el valor de una matriz tú mismo o escribes tu propia implementación de ResourceBundle y lo haces tú mismo :(. Tal vez haya un proyecto de Apache commons para esto ...

A partir del código fuente de JDK, parece que PropertyResourceBundle no lo admite.


Un objeto Properties puede contener Object s , no solo String s. Eso tiende a olvidarse porque se usan abrumadoramente para cargar archivos .properties, y tan a menudo solo contendrán String . La documentación indica que llamar a bundle.getStringArray(key) es equivalente a llamar (String[]) bundle.getObject(key) . Ese es el problema: el valor no es una String[] , es una String .

Sugeriría almacenarlo en formato delimitado por comas y llamar a split() en el valor.


public String[] getPropertyStringArray(PropertyResourceBundle bundle, String keyPrefix) { String[] result; Enumeration<String> keys = bundle.getKeys(); ArrayList<String> temp = new ArrayList<String>(); for (Enumeration<String> e = keys; keys.hasMoreElements();) { String key = e.nextElement(); if (key.startsWith(keyPrefix)) { temp.add(key); } } result = new String[temp.size()]; for (int i = 0; i < temp.size(); i++) { result[i] = bundle.getString(temp.get(i)); } return result; }


ejemplo:

[email protected], [email protected]

..

myBundle=PropertyResourceBundle.getBundle("mailTemplates/bundle-name", _locale);

..

public List<String> getCcEmailAddresses() { List<String> ccEmailAddresses=new ArrayList<String>(); if(this.myBundle.containsKey("mail.ccEmailAddresses")) { ccEmailAddresses.addAll(Arrays.asList(this.template.getString("mail.ccEmailAddresses").split("//s*(,|//s)//s*")));// 1)Zero or more whitespaces (//s*) 2) comma, or whitespace (,|//s) 3) Zero or more whitespaces (//s*) } return ccEmailAddresses; }


Puede usar Commons Configuration , que tiene los métodos getList y getStringArray que le permiten recuperar una lista de cadenas separadas por comas.


He intentado esto y podría encontrar una manera. Una forma es definir una subclase de ListresourceBundle, luego definir la variable de instancia de tipo String [] y asignar el valor a la clave. Aquí está el código

@Override protected Object[][] getContents() { // TODO Auto-generated method stub String[] str1 = {"L1","L2"}; return new Object[][]{ {"name",str1}, {"country","UK"} }; }


key=value1;value2;value3 String[] toArray = rs.getString("key").split(";");