Простой пример работы с Property файлами в Java
Property файлы присутствуют практически в каждом проекте, и сейчас я вам покажу простой пример их использования, а также расскажу, зачем они и где используются.
Шаг 0. Создание проекта
Начнем с того что создадим простой Maven проект, указав название и имя пакета:
Структура, которая получится в конце проекта довольно таки простая.
Как видите у нас только два файла, первый – Main.java, а второй – config.properties.
Шаг 2. Добавляем конфигурационные данные в проперти файл
Проперти файлы либо файлы свойств – предназначены, для того чтобы хранить в них какие-то статические данные необходимые проект, например логин и пароль к БД.
Давайте добавим в наш config.properties логин и пароль (это любые данные, для того чтобы продемонстрировать работу с property файлами).
Содержимое config.properties:
db.host = http://localhost:8888/mydb db.login = root db.password = dbroot
ключ> – это уникальное имя, по которому можно получить доступ к значению, хранимому под этим ключом.
значение> – это текст, либо число, которое вам необходимо для выполнения определённой логики в вашей программе.
Шаг 3. Получаем Property данные
Как можно видеть в структуре проекта выше, там есть класс Main.java давайте его создадим и напишем в нем следующее:
package com.devcolibir.prop; import java.io.*; import java.util.Properties; public class Main < public static void main(String[] args) < FileInputStream fis; Properties property = new Properties(); try < fis = new FileInputStream("src/main/resources/config.properties"); property.load(fis); String host = property.getProperty("db.host"); String login = property.getProperty("db.login"); String password = property.getProperty("db.password"); System.out.println("HOST: " + host + ", LOGIN: " + login + ", PASSWORD: " + password); >catch (IOException e) < System.err.println("ОШИБКА: Файл свойств отсуствует!"); >> >
Обращаясь к property.getProperty(ключ>) – вы получаете его значение.
Вот такой краткий, но думаю познавательный урок.
30.7. Java – Класс Properties
Класс Properties – это подкласс Hashtable. Он используется для хранения списков значений, в которых ключ является String, а значение также является String.
Класс Properties в Java используется множеством других классов. Например, это тип объекта, возвращаемый System.getProperties(), когда тот получает внешние значения.
Properties определяет следующие переменную экземпляра. Эта переменная содержит список свойств по умолчанию, связанный с объектом Properties.
Следующая программа показывает несколько методов, поддерживаемых этой структурой данных:
Конструкторы
Вот список конструкторов, предоставляемые классом Properties.
№ | Конструктор и описание |
1 | Properties() Этот конструктор создает объёкт Properties, который не имеет значений по умолчанию. |
2 | Properties(Properties propDefault) Создаёт объект, который использует propDefault для своих значений по умолчанию. В обоих случаях список свойств пустой. |
Методы
Помимо методов, определённых Hashtable, Properties определяет следующие методы:
№ | Метод и описание |
1 | String getProperty(String key) Возвращает значение, связанное с ключом. Возвращается нулевой объект, если ключ не находится ни в списке, ни в списке свойств по умолчанию. |
2 | String getProperty(String key, String defaultProperty) Возвращает значение, связанное с ключом; Возвращается defaultProperty, если ключ не находится ни в списке, ни в списке свойств по умолчанию. |
3 | void list(PrintStream streamOut) Отправляет список свойств в выходной поток, связанный с streamOut. |
4 | void list(PrintWriter streamOut) Отправляет список свойств в выходной поток, связанный с streamOut. |
5 | void load(InputStream streamIn) throws IOException Вводит список свойств из входного потока, связанного с streamIn. |
6 | Enumeration propertyNames() Возвращает перечисление ключей, включая ключи, найденные в списке свойств по умолчанию. |
7 | Object setProperty(String key, String value) Связывает значение с ключом. Возвращает предыдущее значение, связанное с ключом, или возвращает ноль, если такой связи не существует. |
8 | void store(OutputStream streamOut, String description) После записи строки, указанной в описании, список свойств записывается в выходной поток, связанный с streamOut. |
Пример
Следующая программа показывает несколько методов, поддерживаемых этой структурой данных:
import java.util.*; public class PropDemo < public static void main(String args[]) < Properties capitals = new Properties(); Set states; String str; capitals.put("Иллинойс", "Спрингфилд"); capitals.put("Миссури", "Джефферсон-Сити"); capitals.put("Вашингтона", "Олимпия"); capitals.put("Калифорнии", "Сакраменто"); capitals.put("Индианы", "Индианаполис"); // Показывает все штаты и столицы в хэш-таблицы. states = capitals.keySet(); // Получить набор ключей Iterator itr = states.iterator(); while(itr.hasNext()) < str = (String) itr.next(); System.out.println("Столицей " + str + " является " + capitals.getProperty(str) + "."); >System.out.println(); // При нахождении штата вне списка –– указать значение по умолчания. str = capitals.getProperty("Флорида", "Не Найдена"); System.out.println("Столица Флориды " + str + "."); > >
Столицей Миссури является Джефферсон-Сити. Столицей Иллинойс является Спрингфилд. Столицей Индианы является Индиана полис. Столицей Калифорнии является Сакраменто. Столицей Вашингтона является Олимпия. Столица Флориды Не Найдена.
Оглавление
- 1. Java – Самоучитель для начинающих
- 2. Java – Обзор языка
- 3. Java – Установка и настройка
- 4. Java – Синтаксис
- 5. Java – Классы и объекты
- 6. Java – Конструкторы
- 7. Java – Типы данных и литералы
- 8. Java – Типы переменных
- 9. Java – Модификаторы
- 10. Java – Операторы
- 11. Java – Циклы и операторы цикла
- 11.1. Java – Цикл while
- 11.2. Java – Цикл for
- 11.3. Java – Улучшенный цикл for
- 11.4. Java – Цикл do..while
- 11.5. Java – Оператор break
- 11.6. Java – Оператор continue
- 12. Java – Операторы принятия решений
- 12.1. Java – Оператор if
- 12.2. Java – Оператор if..else
- 12.3. Java – Вложенный оператор if
- 12.4. Java – Оператор switch..case
- 12.5. Java – Условный оператор (? 🙂
- 13. Java – Числа
- 13.1. Java – Методы byteValue(), shortValue(), intValue(), longValue(), floatValue(), doubleValue()
- 13.2. Java – Метод compareTo()
- 13.3. Java – Метод equals()
- 13.4. Java – Метод valueOf()
- 13.5. Java – Метод toString()
- 13.6. Java – Метод parseInt()
- 13.7. Java – Метод Math.abs()
- 13.8. Java – Метод Math.ceil()
- 13.9. Java – Метод Math.floor()
- 13.10. Java – Метод Math.rint()
- 13.11. Java – Метод Math.round()
- 13.12. Java – Метод Math.min()
- 13.13. Java – Метод Math.max()
- 13.14. Java – Метод Math.exp()
- 13.15. Java – Метод Math.log()
- 13.16. Java – Метод Math.pow()
- 13.17. Java – Метод Math.sqrt()
- 13.18. Java – Метод Math.sin()
- 13.19. Java – Метод Math.cos()
- 13.20. Java – Метод Math.tan()
- 13.21. Java – Метод Math.asin()
- 13.22. Java – Метод Math.acos()
- 13.23. Java – Метод Math.atan()
- 13.24. Java – Метод Math.atan2()
- 13.25. Java – Метод Math.toDegrees()
- 13.26. Java – Метод Math.toRadians()
- 13.27. Java – Метод Math.random()
- 14. Java – Символы
- 14.1. Java – Метод Character.isLetter()
- 14.2. Java – Метод Character.isDigit()
- 14.3. Java – Метод Character.isWhitespace()
- 14.4. Java – Метод Character.isUpperCase()
- 14.5. Java – Метод Character.isLowerCase()
- 14.6. Java – Метод Character.toUpperCase()
- 14.7. Java – Метод Character.toLowerCase()
- 14.8. Java – Метод Character.toString()
- 15. Java – Строки
- 15.1. Java – Метод charAt()
- 15.2. Java – Метод compareTo()
- 15.3. Java – Метод compareToIgnoreCase()
- 15.4. Java – Метод concat()
- 15.5. Java – Метод contentEquals()
- 15.6. Java – Метод copyValueOf()
- 15.7. Java – Метод endsWith()
- 15.8. Java – Метод equals()
- 15.9. Java – Метод equalsIgnoreCase()
- 15.10. Java – Метод getBytes()
- 15.11. Java – Метод getChars()
- 15.12. Java – Метод hashCode()
- 15.13. Java – Метод indexOf()
- 15.14. Java – Метод intern()
- 15.15. Java – Метод lastIndexOf()
- 15.16. Java – Метод length()
- 15.17. Java – Метод matches()
- 15.18. Java – Метод regionMatches()
- 15.19. Java – Метод replace()
- 15.20. Java – Метод replaceAll()
- 15.21. Java – Метод replaceFirst()
- 15.22. Java – Метод split()
- 15.23. Java – Метод startsWith()
- 15.24. Java – Метод subSequence()
- 15.25. Java – Метод substring()
- 15.26. Java – Метод toCharArray()
- 15.27. Java – Метод toLowerCase()
- 15.28. Java – Метод toString()
- 15.29. Java – Метод toUpperCase()
- 15.30. Java – Метод trim()
- 15.31. Java – Метод valueOf()
- 15.32. Java – Классы StringBuilder и StringBuffer
- 15.32.1. Java – Метод append()
- 15.32.2. Java – Метод reverse()
- 15.32.3. Java – Метод delete()
- 15.32.4. Java – Метод insert()
- 15.32.5. Java – Метод replace()
- 16. Java – Массивы
- 17. Java – Дата и время
- 18. Java – Регулярные выражения
- 19. Java – Методы
- 20. Java – Потоки ввода/вывода, файлы и каталоги
- 20.1. Java – Класс ByteArrayInputStream
- 20.2. Java – Класс DataInputStream
- 20.3. Java – Класс ByteArrayOutputStream
- 20.4. Java – Класс DataOutputStream
- 20.5. Java – Класс File
- 20.6. Java – Класс FileReader
- 20.7. Java – Класс FileWriter
- 21. Java – Исключения
- 21.1. Java – Встроенные исключения
- 22. Java – Вложенные и внутренние классы
- 23. Java – Наследование
- 24. Java – Переопределение
- 25. Java – Полиморфизм
- 26. Java – Абстракция
- 27. Java – Инкапсуляция
- 28. Java – Интерфейсы
- 29. Java – Пакеты
- 30. Java – Структуры данных
- 30.1. Java – Интерфейс Enumeration
- 30.2. Java – Класс BitSet
- 30.3. Java – Класс Vector
- 30.4. Java – Класс Stack
- 30.5. Java – Класс Dictionary
- 30.6. Java – Класс Hashtable
- 30.7. Java – Класс Properties
- 31. Java – Коллекции
- 31.1. Java – Интерфейс Collection
- 31.2. Java – Интерфейс List
- 31.3. Java – Интерфейс Set
- 31.4. Java – Интерфейс SortedSet
- 31.5. Java – Интерфейс Map
- 31.6. Java – Интерфейс Map.Entry
- 31.7. Java – Интерфейс SortedMap
- 31.8. Java – Класс LinkedList
- 31.9. Java – Класс ArrayList
- 31.10. Java – Класс HashSet
- 31.11. Java – Класс LinkedHashSet
- 31.12. Java – Класс TreeSet
- 31.13. Java – Класс HashMap
- 31.14. Java – Класс TreeMap
- 31.15. Java – Класс WeakHashMap
- 31.16. Java – Класс LinkedHashMap
- 31.17. Java – Класс IdentityHashMap
- 31.18. Java – Алгоритмы Collection
- 31.19. Java – Iterator и ListIterator
- 31.20. Java – Comparator
- 32. Java – Дженерики
- 33. Java – Сериализация
- 34. Java – Сеть
- 34.1. Java – Обработка URL
- 35. Java – Отправка Email
- 36. Java – Многопоточность
- 36.1. Java – Синхронизация потоков
- 36.2. Java – Межпоточная связь
- 36.3. Java – Взаимная блокировка потоков
- 36.4. Java – Управление потоками
- 37. Java – Основы работы с апплетами
- 38. Java – Javadoc
Properties
В Java принято делать программы гибкими и легко настраиваемыми. Иногда еще говорят легко конфигурируемыми (от конфигурация).
Например, твоя программа раз в час копирует файлы из некоторой директории, архивирует их и отсылает тебе на email. Для этого программе надо знать директорию, откуда брать файлы и email, куда их посылать. Такие данные принято хранить не в коде программы, а в отдельных файлах свойств – properties-файлах.
Данные в таком файле хранятся в виде пар ключ-значение, разделенные знаком равно.
Файл data.properties directory=c:/text/downloads email=zapp@javarush.ru
Слева от знака равно – имя (ключ), справа – значение.
— Т.е. это что-то типа текстового представления HashMap?
Для удобной работы с такими файлами в Java есть специальный класс – Properties. Класс Properties унаследован от Hashtable. Его даже можно рассматривать как HashTable, который умеет загружать себя из файла.
Метод | Описание |
---|---|
void load(Reader reader) | Загружает свойства из файла, представленного объектом Reader |
void load(InputStream inStream) | Загружает свойства из файла, представленного объектом InputStream |
void loadFromXML(InputStream in) | Загружает свойства из XML-файла |
Object get(Object key) | Возвращает значение по ключу. Метод унаследован от HashTable |
String getProperty(String key) | Возвращает значение свойства (строку) по ключу |
String getProperty(String key, String defaultValue) | Возвращает значение свойства по ключу или defaultValue, если такого ключа нет |
Set stringPropertyNames() | Возвращает список всех ключей |
Т.е. фактически тебе нужно выполнить всего две операции – загрузить в объект Properties данные из какого-нибудь файла, а затем получить эти свойства с помощью метода getProperty(). Ну и не забывай, что можешь пользоваться объектом Properties как HashMap.
//файл, который хранит свойства нашего проекта File file = new File("c:/data.properties"); //создаем объект Properties и загружаем в него данные из файла. Properties properties = new Properties(); properties.load(new FileReader(file)); //получаем значения свойств из объекта Properties String email = properties.getProperty("email"); String directory = properties.getProperty("directory"); //получаем числовое значение из объекта Properties int maxFileSize = Integer.parseInt(properties.getProperty("max.size", "10000"));
— Ага. Т.е. мы создаем объект Properties, затем передаем в него файл. В метод load, а затем просто вызываем getProperty. Так?
— А ты еще говорил, что им можно пользоваться как HashMap? Что ты имел в виду?
— Класс Properties унаследован от Hashtable, а это – тот же HashMap, просто все методы его синхронизированы. Вот так можно просто вывести на экран все значения из файла свойств:
//получаем файл со свойствами File file = new File("c:/data.properties"); //создаем объект Properties и загружаем в него данные из файла. Properties properties = new Properties(); properties.load(new FileReader(file)); //проходимся по всем ключам и печатаем все их значения на консоль for (String key : properties.stringPropertyNames()) < System.out.println(properties.get(key)); >
— Ага. Вроде все стало на свои места. Спасибо, Риша, буду пользоваться такой крутой штукой.