Properties class trong Java

Properties class là một subclass của HashTable, được dùng để lưu trữ một tập các thuộc tính dưới dạng các cặp khoá key-value. Ngoài ra nó còn cung cấp các method cho phép tải các dữ liệu từ các file cấu hình theo các định dạng nhất định mà nó hỗ trợ.

Tải dữ liệu vào Properties

Tải dữ liệu từ tệp cấu hình

Chúng ta bắt đầu trước với việc tải dữ liệu từ tệp cấu hình định dạng key-value. Chẳng hạn như

app.properties:

version=1.0
name=TestApp
date=2016-11-12

Và catalog

c1=files
c2=images
c3=videos

Lưu ý rằng mặc dù các tệp thuộc tính được khuyến nghị sử dụng hậu tố “.properties”, nó không cần thiết.

Bây giờ chúng ta có thể tải chúng rất đơn giản vào một Properties object

String rootPath = Thread.currentThread().getContextClassLoader().getResource("").getPath();
String appConfigPath = rootPath + "app.properties";
String catalogConfigPath = rootPath + "catalog";

Properties appProps = new Properties();
appProps.load(new FileInputStream(appConfigPath));

Properties catalogProps = new Properties();
catalogProps.load(new FileInputStream(catalogConfigPath));

  
String appVersion = appProps.getProperty("version");
assertEquals("1.0", appVersion);
        
assertEquals("files", catalogProps.getProperty("c1"));

Miễn là nội dung của tệp đáp ứng các yêu cầu về định dạng tệp cấu hình, thì Properties class đều có thể đọc được.

Tải dữ liệu từ XML

Bên cạnh các tệp cấu hình, chúng ta có thể tải từ file XML theo chuẩn DTD. Dưới đây là một ví dụ cons.xml

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
    <comment>xml example</comment>
    <entry key="fileIcon">icon1.jpg</entry>
    <entry key="imageIcon">icon2.jpg</entry>
    <entry key="videoIcon">icon3.jpg</entry>
</properties>

Và chúng ta có thể tải chúng lên Properties thông qua mã sau:

String rootPath = Thread.currentThread().getContextClassLoader().getResource("").getPath();
String iconConfigPath = rootPath + "icons.xml";
Properties iconProps = new Properties();
iconProps.loadFromXML(new FileInputStream(iconConfigPath));

assertEquals("icon1.jpg", iconProps.getProperty("fileIcon"));

Get – Value

Chúng ta có thể sử dụng getProperty(String key) và getProperty(String key, String defaultValue) để lấy các giá trị theo key.

Nếu cặp key-value tồn tại, cả hai phương thức sẽ trả về giá trị tương ứng. Nhưng nếu không có cặp key-value tương ứng thì getProperty(String key, String defaultValue) sẽ trả về giá trị mặc định đã được định nghĩa trước đó.

String appVersion = appProps.getProperty("version");
String appName = appProps.getProperty("name", "defaultName");
String appGroup = appProps.getProperty("group", "deft");
String appDownloadAddr = appProps.getProperty("downloadAddr");

assertEquals("1.0", appVersion);
assertEquals("TestApp", appName);
assertEquals("deft", appGroup);
assertNull(appDownloadAddr);

Set – Value

Chúng ta có thể sử dụng phương thức setProperty() để cập nhật một cặp key-value đã tồn tại trước đó hoặc thêm mới nếu chứa tồn tại.

appProps.setProperty("name", "NewAppName");
appProps.setProperty("downloadAddr", "https://shareprogramming.net/downloads");

String newAppName = appProps.getProperty("name");
assertEquals("NewAppName", newAppName);
        
String newAppDownloadAddr = appProps.getProperty("downloadAddr");
assertEquals("www.baeldung.com/downloads", newAppDownloadAddr);

Remove Properties

Chúng ta có thể sử dụng remove() method để xoá cặp key-value đã tồn tại trước đó.

String versionBeforeRemoval = appProps.getProperty("version");
assertEquals("1.0", versionBeforeRemoval);

appProps.remove("version");    
String versionAfterRemoval = appProps.getProperty("version");
assertNull(versionAfterRemoval);

Lưu trữ

Các cặp key-value tồn tại trên Properties object có thể lưu trữ xuống các tệp cấu hình, XML thông qua các method mà nó cung cấp sẵn kết hợp sử dụng FileIO để triển khai.

Tệp cấu hình

Properties class cung cấp store() method để lưu trữ các cặp key-value xuống tệp cấu hình.

String newAppConfigPropertiesFile = rootPath + "newApp.properties";
appProps.store(new FileWriter(newAppConfigPropertiesFile), "store to properties file");

Tệp XML

Properties class thuộc tính cũng cung cấp phương thức storeToXML() để xuất ra các cặp key-value ở định dạng XML.

 

String newAppConfigXmlFile = rootPath + "newApp.xml";
appProps.storeToXML(new FileOutputStream(newAppConfigXmlFile), "store to xml file");

Encoding

Mặc định, các tệp cấu hình ​sẽ được mã hóa ISO-8859-1 (Latinh-1), do đó, các thuộc tính có ký tự bên ngoài ISO-8859-1 thường không được sử dụng.

Chúng tôi có thể khắc phục hạn chế đó với sự trợ giúp của các công cụ như công cụ JDK native2ascii nếu cần.

Đối với các tệp XML, phương thức loadFromXML() và phương thức storeToXML() sử dụng mã hóa ký tự UTF-8 theo mặc định.

Tuy nhiên, khi đọc một tệp XML được mã hóa khác, chúng ta có thể chỉ định điều đó trong khai báo DOCTYPE; cách viết cũng đủ linh hoạt – chúng tôi có thể chỉ định mã hóa trong tham số thứ ba của API storeToXML().

Kết bài

Trong bài viết này, chúng ta đã thảo luận về cách sử dụng Properties class cơ bản, bao gồm cách sử dụng Properties để tải và lưu trữ các cặp key-value ở cả các file cấu hình và định dạng XML.

Nguồn

https://www.baeldung.com/java-properties

 

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x