NỘI DUNG BÀI HỌC

✳️ Giới thiệu công dụng của file Properties
✳️ Đọc và ghi file Properties trong Java

✅ File Properties trong Java là như thế nào?

File properties trong Java là một file có phần mở rộng .properties và là một loại file đặc trưng trong ngôn ngữ lập trình Java. Thường chỉ có trong Java.



File properties này được Java thiết kế ra các class xử lý chuyên cho nó để người dùng có thể đọc hoặc ghi vào file.

✅ Công dụng của file Properties trong Java

File Properties trong Java để lưu trữ các tham số có thể cấu hình của một ứng dụng, hay hiểu là dùng để đọc Data Config.

Properties là các giá trị được quản lý theo các cặp key/value. Trong mỗi cặp, key và value đều là kiểu String và value luôn là kiểu String. Key được sử dụng để truy xuất value, giống như tên biến được sử dụng để truy xuất giá trị của biến.

 

browser = chrome
url = https://crm.anhtester.com/admin/authentication
email = admin@example.com
password = 123456

 

✅ Cách đọc ghi file Properties trong Java

Đầu tiên tạo ra các file .properties mà mình mong muốn. Cụ thể như An lấy ví dụ là file configs.properties nhé

Tiếp theo tạo class để xây dựng các hàm đọc ghi file. Ví dụ An lấy tên class là PropertiesHelper.

package Bai18_FileProperties.helpers;

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

public class PropertiesHelper {

    private static Properties properties;
    private static String linkFile;
    private static FileInputStream file;
    private static FileOutputStream out;
    private static String relPropertiesFilePathDefault = "src/Bai18_FileProperties/configs.properties";

    public static Properties loadAllFiles() {
        LinkedList<String> files = new LinkedList<>();
        // Add tất cả file Properties vào đây theo mẫu
        files.add("src/Bai18_FileProperties/configs.properties");
        files.add("src/Bai18_FileProperties/local.properties");

        try {
            properties = new Properties();

            for (String f : files) {
                Properties tempProp = new Properties();
                linkFile = Helpers.getCurrentDir() + f;
                file = new FileInputStream(linkFile);
                tempProp.load(file);
                properties.putAll(tempProp);
            }
            return properties;
        } catch (IOException ioe) {
            return new Properties();
        }
    }

    public static void setFile(String relPropertiesFilePath) {
        properties = new Properties();
        try {
            linkFile = Helpers.getCurrentDir() + relPropertiesFilePath;
            file = new FileInputStream(linkFile);
            properties.load(file);
            file.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void setDefaultFile() {
        properties = new Properties();
        try {
            linkFile = Helpers.getCurrentDir() + relPropertiesFilePathDefault;
            file = new FileInputStream(linkFile);
            properties.load(file);
            file.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static String getValue(String key) {
        String value = null;
        try {
            if (file == null) {
                properties = new Properties();
                linkFile = Helpers.getCurrentDir() + relPropertiesFilePathDefault;
                file = new FileInputStream(linkFile);
                properties.load(file);
                file.close();
            }
            // Lấy giá trị từ file đã Set
            value = properties.getProperty(key);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return value;
    }

    public static void setValue(String key, String keyValue) {
        try {
            if (file == null) {
                properties = new Properties();
                file = new FileInputStream(Helpers.getCurrentDir() + relPropertiesFilePathDefault);
                properties.load(file);
                file.close();
                out = new FileOutputStream(Helpers.getCurrentDir() + relPropertiesFilePathDefault);
            }
            //Ghi vào cùng file Prop với file lấy ra
            out = new FileOutputStream(linkFile);
            System.out.println(linkFile);
            properties.setProperty(key, keyValue);
            properties.store(out, null);
            out.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

}

 

- Hàm loadAllFiles() để khởi tạo giá trị cho nhiều file properties setup sẵn trong hàm.

- Hàm
setFile() để khởi tạo giá trị cho đối tượng properties của class Properties với đường dẫn đến file configs.properties trên.

- Hàm setDefaultFile() để khởi tạo giá trị cho đối tượng properties của class Properties với đường dẫn có sẵn trong class.

- Hàm getValue() để đọc file đã setup bên trên và lấy giá trị ra theo Key trong file đã tạo.

- Hàm setValue() để gán ngược giá trị vói key tương ứng vào lại file properties trên.

Chúng ta có thể chỉ định file properties default để khi nếu không có chỉ định cụ thể thì nó sẽ hiểu là lấy ra file default này:

private static String relPropertiesFilePathDefault = "src/Bai18_FileProperties/configs.properties";


Rồi tiếp theo là gọi hàm ra sử dụng thôi nào

🔆 Cách đọc giá trị từ properties file

Các bạn nhìn thấy là 3 cái hàm trong class PropertiesHelper đều là trạng thái static nên khi mình gọi thì lấy luôn cái tên class để chấm gọi chứ không cần khởi tạo đối tượng của class.

Đầu tiên phải gọi hàm loadAllFiles() để khởi tạo tất cả các file properties chỉ định trong chính hàm này

PropertiesHelper.loadAllFiles();

Còn nếu muốn chỉ định ở file cụ thể thì gọi hàm setFile(file path)

Tiếp theo muốn ĐỌC giá trị từ file properties thì gọi hàm getValue()

PropertiesHelper.getValue("browser")

Cái giá trị "browser" là cái key trong file properties nhen.

Vậy thì khi gọi ra nó sẽ trả về hết quả kiểu String thôi. Cụ thể cái giá trị của key "browser" có giá trị là "chrome" đã tạo bên trên nên nó sẽ trả về giá trị là "chrome"

Ví dụ: mình get giá trị browser, url, emailpassword từ file configs.properties nhé

public class DemoReadValue {
    public static void main(String[] args) {

        //Gọi hàm loadAllFiles trước tiên để load tất cả các file properties vào chung bộ nhớ
        PropertiesHelper.loadAllFiles();

        //Sau đó gọi hàm getValue để lấy giá trị theo tên key
        System.out.println("BROWSER: " + PropertiesHelper.getValue("browser"));
        System.out.println("URL: " + PropertiesHelper.getValue("url"));
        System.out.println("EMAIL: " + PropertiesHelper.getValue("email"));
        System.out.println("PASSWORD: " + PropertiesHelper.getValue("password"));

    }
}


Kết quả:

BROWSER: chrome
URL: https://crm.anhtester.com/admin/authentication
EMAIL: admin@example.com
PASSWORD: 123456

 

🔆 Cách ghi giá trị vào properties file

Trước tiên, các bạn cần chỉ định file cụ thể cần ghi vào thông qua hàm setFile. Chúng ta sử dụng đường dẫn tương đối trong project hiện tại.

Tiếp theo, các bạn dùng hàm setValue để truyền giá trị theo từng key là xong.

public class DemoSetValue {
    public static void main(String[] args) {
        //Trước tiên chỉ định file cần set giá trị vào
        //Dùng đường dẫn tương đối
        //Ví dụ file local.properties
        PropertiesHelper.setFile("src/Bai18_FileProperties/local.properties");

        //Gọi hàm setValue để gán giá trị theo key
        PropertiesHelper.setValue("author", "Anh Tester");
    }
}

Kết quả khi mở file local.properties sau khi set value:

#Tue Nov 14 08:56:35 ICT 2023
author=Anh Tester


Teacher

Teacher

Anh Tester

Software Quality Engineer

Đường dẫu khó chân vẫn cần bước đi
Đời dẫu khổ tâm vẫn cần nghĩ thấu

Cộng đồng Automation Testing Việt Nam:

🌱 Telegram Automation Testing:   Cộng đồng Automation Testing
🌱 
Facebook Group Automation: Cộng đồng Automation Testing Việt Nam
🌱 
Facebook Fanpage: Cộng đồng Automation Testing Việt Nam - Selenium
🌱 Telegram
Manual Testing:   Cộng đồng Manual Testing
🌱 
Facebook Group Manual: Cộng đồng Manual Testing Việt Nam

Chia sẻ khóa học lên trang

Bạn có thể đăng khóa học của chính bạn lên trang Anh Tester để kiếm tiền

Danh sách bài học