0

Свойства vs Ресурсный пакет

11

Вопрос: Различия между Properties и ResourceBundle в Java

Я изучал свойства (Properties) и ресурсные пакеты (ResourceBundle) в Java, но не смог понять разницу между ними. Когда следует использовать файл Properties, а когда — ресурсный пакет?

Для загрузки файла Properties я использую следующий код:

Properties tempProp = new Properties();
FileInputStream propsFile = new FileInputStream("xyz.properties");
tempProp.load(propsFile);

А для загрузки ресурсного пакета использую такой код:

ResourceBundle labels =
    ResourceBundle.getBundle("xyz", currentLocale);
Enumeration bundleKeys = labels.getKeys();

В обоих случаях (при работе с ресурсным пакетом и Properties) мы используем файл свойств. Единственное различие, которое я заметил, заключается в том, что для хранения специфичных данных приложения мы используем файл Properties, а для данных интернационализации (i18n) — ресурсный пакет. Не уверен, прав ли я в своих выводах.

Мне бы хотелось понять, как использовать оба этих подхода, и в чем заключается разница между ними.

4 ответ(ов)

0

Да, вы мыслите в правильном направлении.

Ресурсные пакеты не обязательно должны использовать файлы свойств — это всего лишь одна из реализаций (PropertyResourceBundle). Файл свойств на самом деле представляет собой просто отображение строк в строки, и хотя это может использоваться для интернационализации (i18n), это не обязательно.

ResourceBundle предоставляет вам согласованный способ запроса соответствующего объекта (обычно строки) для конкретной локали, с возможностью восстановления и т. д. Это часто, но не всегда, поддерживается отдельным файлов свойств для каждого языка.

Таким образом, да: если вы имеете дело с интернационализацией, лучше использовать ResourceBundle; если же вам просто нужно отображение строк, сохраненное в текстовом файле, можно смело использовать Properties напрямую.

0

ResourceBundle помогает загружать свойства, специфичные для локали. Если у вас есть различные файлы свойств для каждой локали, например DE, CN и т. д., ResourceBundle загрузит соответствующий файл свойств для нужной локали. Это позволяет легко управлять интернационализацией приложений, обеспечивая правильный вывод информации в зависимости от языковых и региональных настроек пользователя.

0
  1. Свойства обычно используются для конфигурационных файлов и не предназначены для файлов интернационализации (i18n), таких как log4j.properties или ваш собственный конфигурационный файл.

  2. ResourceBundle предназначен для интернационализации (i18n). "Волшебство" ResourceBundle заключается не только в паре ключ-значение, но и в возможности настройки под конкретный Locale (язык, регион/страна, вариант) с тем же ключом.

Таким образом, всё зависит от ваших потребностей.

0

В контексте использования ресурсов в Java, стоит отметить, что Resource Bundle всегда рассматривает ваши файлы свойств как часть classpath. Если вы развертываете проект, файлы свойств фактически включаются в состав развертываемого приложения.

С другой стороны, класс Property может загружать файлы свойств, и в этом случае файлы не обязательно должны находиться в classpath или входить в состав развертываемого файла. Они могут находиться в файловой системе или в какой-либо другой папке.

Таким образом, на практике, вам не обязательно помещать файлы свойств в classpath: можно загружать их напрямую из любого места, где они находятся на вашем компьютере или сервере. Просто убедитесь, что вы правильно указываете путь к файлам при их загрузке.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь