كيف يمكنني تحديد القيم في ملف خصائص بحيث يمكن استرجاعها باستخدام ResourceBundle # getStringArray؟

StackOverflow https://stackoverflow.com/questions/226050

  •  03-07-2019
  •  | 
  •  

سؤال

وأنا أحاول أن استخدام ResourceBundle#getStringArray لاسترداد String[] من ملف الممتلكات. وصف هذا الأسلوب في الوثائق ما يلي:

<اقتباس فقرة>   

ويحصل على صفيف سلسلة للحصول على مفتاح معين من هذه الحزمة الموارد أو أحد والديه.

ولكن، لقد حاولت لتخزين القيم في خصائص الملف إلى عدة أزواج الفردية مفتاح / قيمة:

key=value1
key=value2
key=value3

ووكقائمة بفواصل:

key=value1,value2,value3

ولكن أيا من هذه هو استرجاعها باستخدام ResourceBundle#getStringArray.

وكيف تمثل مجموعة من مفتاح / أزواج قيمة في خصائص ملف بحيث يمكن استرجاعها باستخدام ResourceBundle#getStringArray؟

هل كانت مفيدة؟

المحلول

وكائن Properties يمكن أن تعقد على Objects ، أو ليس فقط Strings. التي تميل إلى أن ينسى لأنهم معتادون بأغلبية ساحقة لتحميل الملفات .properties، وغالبا ما سوف تحتوي فقط Strings. <وأ 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"}                
    };
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top