Свойства vs Ресурсный пакет
Вопрос: Различия между 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 ответ(ов)
Да, вы мыслите в правильном направлении.
Ресурсные пакеты не обязательно должны использовать файлы свойств — это всего лишь одна из реализаций (PropertyResourceBundle
). Файл свойств на самом деле представляет собой просто отображение строк в строки, и хотя это может использоваться для интернационализации (i18n), это не обязательно.
ResourceBundle
предоставляет вам согласованный способ запроса соответствующего объекта (обычно строки) для конкретной локали, с возможностью восстановления и т. д. Это часто, но не всегда, поддерживается отдельным файлов свойств для каждого языка.
Таким образом, да: если вы имеете дело с интернационализацией, лучше использовать ResourceBundle
; если же вам просто нужно отображение строк, сохраненное в текстовом файле, можно смело использовать Properties
напрямую.
ResourceBundle помогает загружать свойства, специфичные для локали. Если у вас есть различные файлы свойств для каждой локали, например DE, CN и т. д., ResourceBundle загрузит соответствующий файл свойств для нужной локали. Это позволяет легко управлять интернационализацией приложений, обеспечивая правильный вывод информации в зависимости от языковых и региональных настроек пользователя.
Свойства обычно используются для конфигурационных файлов и не предназначены для файлов интернационализации (i18n), таких как log4j.properties или ваш собственный конфигурационный файл.
ResourceBundle предназначен для интернационализации (i18n). "Волшебство" ResourceBundle заключается не только в паре ключ-значение, но и в возможности настройки под конкретный Locale (язык, регион/страна, вариант) с тем же ключом.
Таким образом, всё зависит от ваших потребностей.
В контексте использования ресурсов в Java, стоит отметить, что Resource Bundle всегда рассматривает ваши файлы свойств как часть classpath. Если вы развертываете проект, файлы свойств фактически включаются в состав развертываемого приложения.
С другой стороны, класс Property может загружать файлы свойств, и в этом случае файлы не обязательно должны находиться в classpath или входить в состав развертываемого файла. Они могут находиться в файловой системе или в какой-либо другой папке.
Таким образом, на практике, вам не обязательно помещать файлы свойств в classpath: можно загружать их напрямую из любого места, где они находятся на вашем компьютере или сервере. Просто убедитесь, что вы правильно указываете путь к файлам при их загрузке.
Инициализация ArrayList в одну строчку
Почему нет ConcurrentHashSet, если есть ConcurrentHashMap?
Что такое «сырые типы» и почему их не следует использовать?
Создание репозитория Spring без сущности
Как сгенерировать уникальный хеш-код для строкового ввода в Android?