— Сьогодні ми вивчаємо ще одну нову та цікаву тему – властивості (properties).
У Java прийнято робити програми гнучкими та легко налаштованими. Іноді ще говорять легко конфігурованими (від конфігурації).
Наприклад, твоя програма раз на годину копіює файли з певної директорії, архівує їх та відсилає тобі на email. Для цього програмі треба знати директорію, звідки брати файли та email, куди їх посилати. Такі дані прийнято зберігати не в коді програми, а в окремих файлах властивостей – properties-файлах.
Дані в такому файлі зберігаються у вигляді пар ключ-значення, розділені знаком одно.
Файл data.properties
directory=c:/text/downloads
email=zapp@javarush.ru
Зліва від знаку одно – ім'я (ключ), праворуч – значення.
— Тобто. це щось на кшталт текстового представлення HashMap?
— Загалом, так.
Для зручної роботи з такими файлами Java має спеціальний клас – Properties. Клас Properties успадкований від Hashtable<Object,Object>. Його навіть можна розглядати як 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<String> stringPropertyNames() |
Повертає список усіх ключів |
Тобто. фактично тобі потрібно виконати всього дві операції – завантажити в об'єкт Properties дані з якогось файлу, а потім отримати ці властивості за допомогою методу getProperty(). Ну і не забувай, що можеш користуватися об'єктом Properties як HashMap.
Ось тобі приклад:
//файл, який зберігає властивості нашого проекту
File file = новий 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 = новий 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));
}
— Ага. Наче все стало на свої місця. Дякую, Ріша, користуватимуся такою крутою штукою.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ