Файл properties (властивості) – використовується в Java для зберігання конфігураційних даних, або параметрів проекту у форматі ключ=значення. Такі файли зазвичай мають розширення .properties.

Наприклад я створив файл config.properties, що містить дані для доступу до бази даних:

Для отримання/збереження даних файлу properties, Java має клас java.util.Properties, котрий є підкласом Hashtable. Крім того, цей клас можна використовувати для отримання властивостей системи.

Отримання властивостей з файлу .properties

Код для читання властивостей з мого файлу config.properties:

package wiki.it.notes.properties;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

public class Main {

    public static void main(String[] args) {
        var main = new Main();
        var user = main.getConfigProperty("db.user");
        var password = main.getConfigProperty("db.password");
        var host = main.getConfigProperty("db.host");
        System.out.printf("%s %s %s%n", user, password, host);
    }

    public String getConfigProperty(String key) {
        var properties = new Properties();
        try (var fileInputStream = new FileInputStream("src/main/resources/config.properties")){
            properties.load(fileInputStream);
        } catch(IOException e) {
            e.printStackTrace();
        }

        return properties.getProperty(key);
    }
}

Метод load завантажує властивості файлу за допомогою об’єкту FileInputStream (рядок 20).

Для читання окремої властивості за ключем, клас Properties має метод getProperty:

  • getProperty(String key) – шукає властивість по ключу. Якщо властивість не знайдено повертає null
  • getProperty(String key, String defaultValue) – шукає властивість по ключу. Якщо властивість не знайдено, повертає значення за замовчуванням, котре було передано в параметрі методу

Результат виконання програми:

Запис властивостей в файл .properties

Для прикладу попередньо створюю порожній файл new.config.properties:

Код котрий спочатку завантажує властивості зі вже існуючого файлу config.properties, а потім записує їх в новий файл new.config.properties:

package wiki.it.notes.properties;

import java.io.*;
import java.util.Properties;

public class Main {

    public static void main(String[] args) {
        var main = new Main();
        main.setConfigProperties();
    }
    
    public void setConfigProperties() {
        var properties = new Properties();
        try (var fileInputStream = new FileInputStream("src/main/resources/config.properties"); 
             var fileOutputStream = new FileOutputStream("src/main/resources/new.config.properties")) 
        {
            // Get properties from config.properties
            properties.load(fileInputStream);

            // Set properties new.config.properties
            properties.setProperty("db.name", "PostgreSQL");
            properties.store(fileOutputStream, "Write properties");
        } catch(IOException e) {
            e.printStackTrace();
        }
    }
}

  • в рядку 19, відбувається завантаження властивостей з файлу config.properties
  • метод store(OutputStream out, String comments) об’єкту Properties, записує поточний список властивостей у вихідний потік FileOutputStream, після чого відбувається їх збереження у файл new.config.properties (рядок 23). Другим параметром метод store приймає рядок коментарів, що буде додано до файлу
  • метод properties.setProperty(key, value) додає окрему властивість, до списку вже завантажених (рядок 22)

Результат виконання програми:

Всі властивості було збережено у файл new.config.properties. Також до файлу додано коментар, разом з датою запису.


Мітки: