كيف يمكنني تحديد القيم في ملف خصائص بحيث يمكن استرجاعها باستخدام ResourceBundle # getStringArray؟
-
03-07-2019 - |
سؤال
وأنا أحاول أن استخدام ResourceBundle#getStringArray
لاسترداد String[]
من ملف الممتلكات. وصف هذا الأسلوب في الوثائق ما يلي:
ويحصل على صفيف سلسلة للحصول على مفتاح معين من هذه الحزمة الموارد أو أحد والديه.
اقتباس فقرة>ولكن، لقد حاولت لتخزين القيم في خصائص الملف إلى عدة أزواج الفردية مفتاح / قيمة:
key=value1
key=value2
key=value3
ووكقائمة بفواصل:
key=value1,value2,value3
ولكن أيا من هذه هو استرجاعها باستخدام ResourceBundle#getStringArray
.
وكيف تمثل مجموعة من مفتاح / أزواج قيمة في خصائص ملف بحيث يمكن استرجاعها باستخدام ResourceBundle#getStringArray
؟
المحلول
وكائن Properties
يمكن أن تعقد على Object
s ، أو ليس فقط String
s. التي تميل إلى أن ينسى لأنهم معتادون بأغلبية ساحقة لتحميل الملفات .properties، وغالبا ما سوف تحتوي فقط String
s. <وأ href = "https://web.archive.org/web/20081217073139/http://java.sun.com/j2se/1.4.2/docs/api/java/util/ResourceBundle.html#getStringArray(java .lang.String) "يختلط =" نوفولو noreferrer "> وثائق يشير إلى أن الدعوة bundle.getStringArray(key)
ما يعادل يدعو (String[]) bundle.getObject(key)
. هذه هي المشكلة: قيمة ليست String[]
، انها String
وأنا أقترح تخزينها في شكل بفواصل والدعوة split()
على القيمة.
نصائح أخرى
ويمكنك استخدام العموم تكوين ، التي لديها طرق getList
وgetStringArray
التي تسمح لك لاسترداد قائمة سلاسل مفصولة بفواصل.
وأم، يبدو أن هذا هو مشكلة مشتركة، من المواضيع <لأ href = "http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi؟ubb=get_topic&f=33&t=014772" يختلط = "نوفولو noreferrer"> هنا و هنا .
ويبدو إما أن لا تستخدم أسلوب وتحليل قيمة لمجموعة نفسك أو تكتب تنفيذ ResourceBundle الخاصة بك وتفعل ذلك بنفسك :( وربما هناك مشروعا المشاعات اباتشي لهذا ...
ومن شفرة المصدر JDK، يبدو أن PropertyResourceBundle لا يعتمد عليه.
وعلى سبيل المثال:
mail.ccEmailAddresses=he@anyserver.at, she@anotherserver.at
..
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;
}
لا أعتقد أن هذا ممكن مع ResourceBundles تحميل من ملف الممتلكات. وPropertyResourceBundle تعزز من خصائص الطبقة لتحميل الملف خصائص. الطبقة خصائص بتحميل ملف خصائص كمجموعة من إدخالات خريطة STRING-> سلسلة ولا يدعم سحب سلسلة [] القيم.
ودعوة ResourceBundle.getStringArray يدعو فقط ResourceBundle.getObject، صب نتيجة لسلسلة []. منذ PropertyResourceBundle فقط يد هذا الخروج إلى خصائص المثال فإنه تحميله من الملف، فلن تكون قادرة على الحصول على هذا العمل مع التيار، PropertyResourceBundle الأسهم.
ومجرد استخدام الربيع - ملف الربيع .properties: الحصول عنصر باعتبارها مجموعة
ورمز ذات الصلة:
base.module.elementToSearch=1,2,3,4,5,6
@Value("${base.module.elementToSearch}")
private String[] elementToSearch;
key=value1;value2;value3
String[] toArray = rs.getString("key").split(";");
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;
}
ولقد حاولت ذلك، ويمكن أن تجد وسيلة. طريقة واحدة لتحديد فئة فرعية من ListresourceBundle، ثم تعريف متغير مثيل النوع String [] وتعيين القيمة إلى المفتاح .. هنا هو رمز
@Override
protected Object[][] getContents() {
// TODO Auto-generated method stub
String[] str1 = {"L1","L2"};
return new Object[][]{
{"name",str1},
{"country","UK"}
};
}