Подтвердить что ты не робот

Java.util.MissingResourceException: Не удается найти пакет для базового имени 'имя_файла_имя', locale en_US

Я пытаюсь создать класс утилиты ReadPropertyUtil.java для чтения данных из файла свойств. Пока мой класс находится под каталогом util, мой файл skyscrapper.properties помещается в другой каталог.

Но когда я пытаюсь получить доступ к свойствам с помощью [ResourceBundle][1], я получаю исключения, этот пакет не может быть загружен.

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

ReadPropertiesUtil.java

/**
 * Properties file name.
 */
private static final String FILENAME = "skyscrapper";

/**
 * Resource bundle.
 */
private static ResourceBundle resourceBundle = ResourceBundle.getBundle(FILENAME);

/**
 * Method to read the property value.
 * 
 * @param key
 * @return
 */
public static String getProperty(final String key) {
    String str = null;
    if (resourceBundle != null) {
        str = resourceBundle.getString(key);
            LOGGER.debug("Value found: " + str + " for key: " + key);
    } else {
            LOGGER.debug("Properties file was not loaded correctly!!");
    }
    return str;
}

Структура каталогов

enter image description here

Эта строка дает ошибку private static ResourceBundle resourceBundle = ResourceBundle.getBundle(FILENAME);

Я не могу понять, почему это не работает и каково решение. Папка src уже добавлена ​​в путь сборки полностью.

4b9b3361

Ответ 1

Попробуйте использовать полное имя для ресурса:

private static final String FILENAME = "resources/skyscrapper";

Ответ 2

ResourceBundle не загружает файлы? Сначала вам нужно сначала загрузить файлы в ресурс. Как насчет просто загрузки в FileInputStream, затем PropertyResourceBundle

   FileInputStream fis = new FileInputStream("skyscrapper.properties");
   resourceBundle = new PropertyResourceBundle(fis);

Или, если вам нужен код, специфичный для локали, что-то вроде этого должно работать

File file = new File("skyscrapper.properties");
URL[] urls = {file.toURI().toURL()};
ClassLoader loader = new URLClassLoader(urls);
ResourceBundle rb = ResourceBundle.getBundle("skyscrapper", Locale.getDefault(), loader);

Ответ 3

Вы должны указать имя файла свойств без расширения .properties, он работает правильно для меня:)

Ответ 4

Используйте ресурс, например

ResourceBundle rb = ResourceBundle.getBundle("com//sudeep//internationalization//MyApp",locale);
or
ResourceBundle rb = ResourceBundle.getBundle("com.sudeep.internationalization.MyApp",locale);

Просто дайте квалифицированный путь.. Его работа для меня!!!

Ответ 5

Я хотел бы поделиться своим опытом использования Ant в проектах построения, *.properties файлы должны быть явно скопированы. Это связано с тем, что Ant не будет компилировать файлы *.properties в рабочий каталог сборки по умолчанию (javac просто игнорирует *.properties). Например:

<target name="compile" depends="init">
    <javac destdir="${dst}" srcdir="${src}" debug="on" encoding="utf-8" includeantruntime="false">
        <include name="com/example/**" />
        <classpath refid="libs" />
    </javac>
    <copy todir="${dst}">
        <fileset dir="${src}" includes="**/*.properties" />
    </copy>
</target>

<target name="jars" depends="compile">
    <jar jarfile="${app_jar}" basedir="${dst}" includes="com/example/**/*.*" />
</target>

Обратите внимание, что раздел "копировать" под целью "компиляции" будет реплицировать файлы *.properties в рабочий каталог сборки. Без раздела "copy" файл jar не будет содержать файлы свойств, тогда вы можете столкнуться с java.util.MissingResourceException.

Ответ 6

С Eclipse и Windows:

вам нужно скопировать 2 файла - xxxPROJECTxxx.properties - log4j.properties здесь: C:\Eclipse\CONTENER\TOMCAT\apache-tomcat-7\lib