Необходимо избегать [в начале значения.
Я использую PropertyResourceBundle для чтения файла свойств, и у меня есть свойство, значение которого начинается с квадратной скобки, такой как
myapp.add.user.email.selfRegistration.subject=[MYAPP] Welcome to MYAPP
когда я пытаюсь прочитать этот файл, я получаю следующее исключение
java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to
java.lang.String at
java.util.ResourceBundle.getString(ResourceBundle.java:355)
Я использую jdk7
java.util.PropertyResourceBundle
основан на java.util.Properties
. Технически java.util.Properties
реализует Map<Object,Object>
но при загрузке свойств из файла ключи и значения ограничиваются только String
(проверьте источник методов java.util.Properties.load()
). И символ '[' не имеет особого значения в формате файла свойств.
Следовательно, невозможно получить ClassCastException
из-за попытки ClassCastException
String[]
к String
если все ваши пакеты ресурсов действительно основаны на файлах свойств.
Скорее всего, у вас есть ListResourceBundle
-based (или пользовательский подкласс ResourceBundle
), который может содержать значения любого типа, включая массивы.
И возможно объединить пакеты ресурсов -based и class -based с тем же базовым именем, например, пакет ресурсов по умолчанию может быть файлом свойств, а дочерние пакеты, специфичные для локали, - ListResourceBundle
-based.
Я пробовал то же самое с программой ниже, и я могу получить выход из своей программы без каких-либо исключений
вы можете проверить его и сообщить мне, если возникнут какие-либо другие проблемы
package com.kb;
import java.util.Enumeration;
import java.util.ResourceBundle;
public class ResourceBundleTest {
public static void main(String[] args) {
ResourceBundle rb = ResourceBundle.getBundle("mybundle");
Enumeration <String> keys = rb.getKeys();
while (keys.hasMoreElements()) {
String key = keys.nextElement();
String value = rb.getString(key);
System.out.println(key + ": " + value);
}
}
}
"String value = rb.getString(key);"
до сих пор бросает то же исключение
ListResourceBundle
работал; но теперь я расширяюPropertyResourceBundle
для обработки моего случая.