Ответ 1
Попробуйте использовать полное имя для ресурса:
private static final String FILENAME = "resources/skyscrapper";
Я пытаюсь создать класс утилиты 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;
}
Структура каталогов
Эта строка дает ошибку private static ResourceBundle resourceBundle = ResourceBundle.getBundle(FILENAME);
Я не могу понять, почему это не работает и каково решение. Папка src
уже добавлена в путь сборки полностью.
Попробуйте использовать полное имя для ресурса:
private static final String FILENAME = "resources/skyscrapper";
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);
Вы должны указать имя файла свойств без расширения .properties
,
он работает правильно для меня:)
Используйте ресурс, например
ResourceBundle rb = ResourceBundle.getBundle("com//sudeep//internationalization//MyApp",locale);
or
ResourceBundle rb = ResourceBundle.getBundle("com.sudeep.internationalization.MyApp",locale);
Просто дайте квалифицированный путь.. Его работа для меня!!!
Я хотел бы поделиться своим опытом использования 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.
С Eclipse и Windows:
вам нужно скопировать 2 файла - xxxPROJECTxxx.properties - log4j.properties здесь: C:\Eclipse\CONTENER\TOMCAT\apache-tomcat-7\lib