Java: escape-последовательность файла свойств для квадратной скобки

1

Необходимо избегать [в начале значения.

Я использую 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

Теги:
properties-file
resourcebundle

2 ответа

1
Лучший ответ

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.

  • 0
    да ListResourceBundle работал; но теперь я расширяю PropertyResourceBundle для обработки моего случая.
0

Я пробовал то же самое с программой ниже, и я могу получить выход из своей программы без каких-либо исключений

вы можете проверить его и сообщить мне, если возникнут какие-либо другие проблемы

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);
        }
    }

}
  • 0
    "String value = rb.getString(key);" до сих пор бросает то же исключение
  • 0
    Я получаю вывод в виде myapp.add.user.email.selfRegistration.subject: [MYAPP] Добро пожаловать в MYAPP, когда я запускаю вышеуказанную программу ... какую версию jdk ru использует?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню