J'essaie d'utiliser ResourceBundle#getStringArray
pour récupérer un String[]
à partir d'un fichier de propriétés. La description de cette méthode dans la documentation se lit comme suit:
Obtient un tableau de chaînes pour la clé donnée à partir de ce groupe de ressources ou de l'un de ses parents.
Cependant, j'ai tenté de stocker les valeurs dans le fichier de propriétés sous la forme de plusieurs paires clé/valeur individuelles:
key=value1
key=value2
key=value3
et en tant que liste délimitée par des virgules:
key=value1,value2,value3
mais aucun de ceux-ci n'est récupérable en utilisant ResourceBundle#getStringArray
.
Comment représentez-vous un ensemble de paires clé/valeur dans un fichier de propriétés de sorte qu'elles puissent être récupérées à l'aide de ResourceBundle#getStringArray
?
Un objet Properties
peut contenir Object
s, pas seulement String
s. Cela a tendance à être oublié car ils sont très utilisés pour charger des fichiers .properties et ne contiennent souvent que String
s. La documentation indique que l'appel de bundle.getStringArray(key)
équivaut à l'appel de (String[]) bundle.getObject(key)
. C'est le problème: la valeur n'est pas un String[]
, c'est une String
.
Je suggère de le stocker au format délimité par des virgules et d’appeler split()
sur la valeur.
Vous pouvez utiliser Commons Configuration , qui utilise les méthodes getList
et getStringArray
qui vous permettent de récupérer une liste de chaînes séparées par des virgules.
Umm, on dirait que c'est un problème commun, à partir de fils ici et ici .
Il semble que vous n'utilisiez pas la méthode et n'analysiez pas vous-même la valeur d'un tableau ou que vous écriviez votre propre implémentation ResourceBundle et le fassiez vous-même :(. Peut-être existe-t-il un projet commun Apache pour cela ...
D'après le code source de JDK, le PropertyResourceBundle ne le prend pas en charge.
exemple:
[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;
}
il suffit d’utiliser spring - Spring .properties file: obtenir l’élément sous forme de tableau
code pertinent:
base.module.elementToSearch=1,2,3,4,5,6
@Value("${base.module.elementToSearch}")
private String[] elementToSearch;
Je ne crois pas que cela soit possible avec ResourceBundles chargé à partir d'un fichier de propriétés. PropertyResourceBundle exploite la classe Properties pour charger le fichier de propriétés. La classe Properties charge un fichier de propriétés sous la forme d'un ensemble d'entrées de mappe String-> String et ne prend pas en charge l'extraction des valeurs String [].
L'appel de ResourceBundle.getStringArray appelle tout simplement ResourceBundle.getObject, en convertissant le résultat en String []. Etant donné que PropertyResourceBundle ne fait que transférer cela à l'instance de propriétés qu'il a chargée à partir du fichier, vous ne pourrez jamais le faire fonctionner avec le PropertyResourceBundle en stock actuel.
key=value1;value2;value3
String[] toArray = rs.getString("key").split(";");
J'ai essayé ceci et je pourrais trouver un moyen… .. Une solution consiste à définir une sous-classe de ListresourceBundle, puis à définir une variable d'instance de type String []
@Override
protected Object[][] getContents() {
// TODO Auto-generated method stub
String[] str1 = {"L1","L2"};
return new Object[][]{
{"name",str1},
{"country","UK"}
};
}
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;
}