1. Properties trong Java là gì?

Properties là một lớp con được kế thừa từ lớp cha Hashtable, lớp này được sử dụng để lấy ra thông tin có trong File có định dạng .properties hoặc thể được sử dụng để lấy các thuộc tính của một hệ thống. Lớp Properties cũng là một cấu trúc lưu trữ dữ liệu theo dạng Key => value.

Tương tự như lớp cha Hashtable của nó cũng cho phép chúng ta dựa vào Key để lấy ra giá trị Value có trong Properties. Lớp Properties cung cấp các phương thức để lấy dữ liệu từ tệp thuộc tính và lưu trữ dữ liệu vào tệp thuộc tính (File .properties).

Ưu điểm của lớp Properties là Không cần biên dịch nếu thông tin được thay đổi từ tệp thuộc tính (File .properties)điều này nghĩa là bạn sẽ không cần biên dịch lại chương trình Java khi có thông tin thay đổi trong tệp thuộc tính (File .properties), bời vì mặc định nó được sử dụng để lưu trữ thông tin mà sẽ được thay đổi thường xuyên.

Lớp Properties này thuộc trong thư viện java.util và để sử dụng được lớp Properties trong thư viện trên ta cần nhập thư viện: import java.util. *;

2. Khai báo lớp Properties trong Java

Lớp Properties() đã được xây dựng sẵn trong Java, và để khai báo và sử dụng được lớp này ta chỉ cần nhập thư viện java.util.*  vào chương trình và gọi đến tên lớp Properties()  – cú pháp khai báo lớp Properties() như sau:

Properties p = new Properties();

Trong đó:

  • p là tên cần đặt cho Properties cần khởi tạo

Lớp Properties() tồn tại 2 constructor và được mô tả ở bảng bên dưới đây:

Hàm khởi tạo Mô tả
Properties() Tạo ra một đối tượng Properties rỗng và không có giá trị mặc định.
Properties(Properties defaults) Tạo ra một đối tượng Properties được khởi tạo kèm với giá trị mặc định.

Lớp Properties() được sử dụng để lấy ra thông tin có trong File có định dạng .properties vì vậy, trong ví dụ khai báo về lớp Properties() này chúng ta sẽ cần tạo ra một file mẫu có tên là user.properties nội dung của file đó sẽ như sau:

  • File user.properties
user=root
pass=123123

Bây giờ, chúng ta sẽ bắt tay vào tạo ra một chương trình Java sử dụng lớp Properties() để lấy ra các trường thông tin có trong File user.properties ở trên!

import java.util.*;  
import java.io.*;  
public class Main {  
    public static void main(String[] args)throws Exception{
        //Doc file user.properties
        FileReader user_properties = new FileReader("user.properties");  
        //Khoi tao lop Properties
        Properties p = new Properties(); 
        //Nap file user.properties vao trong Properties
        p.load(user_properties);  
        //Lay ra gia tri cua thuoc tinh user va password co trong file user.properties
        System.out.println(p.getProperty("user"));  
        System.out.println(p.getProperty("password"));  
    }  
}

Kết quả:

root
123123

Kể từ bây giờ nếu bạn thay đổi giá trị của tệp thuộc tính user.properties, bạn sẽ không cần phải biên dịch lại chương trình Java trên nữa. Bởi vì nó được sử dụng để lưu trữ thông tin mà sẽ được thay đổi thường xuyên.

3. Thao tác với Properties trong Java

Một trong những thao tác của lớp Properties() thường được sử dụng đó là lấy ra thông tin liên quan đến hệ thống, ngoài ra nó còn được sử dụng để tạo ra các tệp thuộc tính có phần mở rộng .properties.

3.1 Lấy thông tin thuộc tính của hệ thống trong Java

Một chương trình Java khi được thực thi sẽ có rất nhiều thông tin liên quan đến chương trình đó, và để lấy ra các thông tin thuộc tính của hệ thống trong Java ta sẽ cần sử dụng đến lớp Properties() để làm điều này.

Các thông tin lấy được có thể là thông tin về môi trường, thông tin về đường dẫn thư viện, thông tin về phiên bản vm.version….Chương trình dưới đây sẽ lấy ra đầy đủ các thông tin thuộc tính của hệ thống trong Java:

import java.util.*;  
import java.io.*;  
public class Main {  
    public static void main(String[] args)throws Exception{
    	//Khoi tao lop Properties la cac thuoc tinh cua he thong  
        Properties p = System.getProperties(); 
        //Luu cac thong tin vao set de duyet
        Set set = p.entrySet();  
        Iterator itr=set.iterator();  
        //Duyet qua cac thong tin thuoc tinh cua he thong
        while(itr.hasNext()){  
            Map.Entry entry=(Map.Entry)itr.next();  
        	System.out.println(entry.getKey()+" = "+entry.getValue());  
        }  
    }  
}

Kết quả:

java.specification.version = 18
sun.cpu.isalist = amd64
sun.jnu.encoding = Cp1252
java.class.path = C:\Users\Administrator\Desktop\Bai Tap Java\Main\build\classes
java.vm.vendor = Oracle Corporation
sun.arch.data.model = 64
user.variant = 
java.vendor.url = https://java.oracle.com/
user.country.format = VN
java.vm.specification.version = 18
os.name = Windows 11
sun.java.launcher = SUN_STANDARD
user.country = US
sun.boot.library.path = C:\Program Files\Java\jdk-18.0.1\bin
sun.java.command = Main
jdk.debug = release
sun.cpu.endian = little
user.home = C:\Users\Administrator
user.language = en
java.specification.vendor = Oracle Corporation
jdk.module.path = C:\Users\Administrator\Desktop\Bai Tap Java\Main\build\classes
java.version.date = 2022-04-19
java.home = C:\Program Files\Java\jdk-18.0.1
file.separator = \
java.vm.compressedOopsMode = 32-bit
line.separator = 
...............................................

3.2 Tạo tệp thuộc tính trong Java

Chúng ta hoàn toàn có thế sử dụng lớp Properties() để tạo ra các tệp có định dạng .properties – tệp này sẽ lưu trữ các thông tin giá trị thuộc tính do ta tự định nghĩa.

Các bạn có thể tạo ra các tệp .properties để lưu trữ thông tin tài khoản, thông tin đăng nhập, thông tin cài đặt… để thuận tiện cho việc sử dụng sau này. Như ví dụ dưới đây, sẽ tạo ra một tệp info..properties để tạo ra tệp thuộc tính lưu trữ thông tin họ tên (name)tuổi (age) như sau:

import java.util.*;  
import java.io.*;  
public class Main {  
    public static void main(String[] args)throws Exception{  
    //Khoi tao thuoc tinh
        Properties p = new Properties();
        //Dat cac gia tri cho cac thuoc tinh can them
        p.setProperty("name","Chu Minh Nam");  
        p.setProperty("age","20 tuoi");  
    //Luu lai cac thuoc tinh tren vao file info.properties
        p.store(new FileWriter("info.properties"),"Thuoc tinh NAME va AGE");  
    }  
}

Kết quả tệp info..properties như sau:

Thuoc tinh NAME va AGE
name = Chu Minh Nam
age = 20 tuoi

4. Các phương thức của Properties trong Java

Trong các ví dụ trên, chúng ta đã sử dụng nhiều phương thức của lớp Properties() như: setProperty(), load(), store()…tuy nhiên, lớp này còn cung cấp thêm cho chúng ta nhiều hơn các phương thức nữa, các phương thức thường sử dụng của lớp Properties() được liệt kê ở bảng dưới đây:

Phương thức Mô tả
String getProperty(String key) Lấy ra giá trị value của của một thuộc tính dựa vào key. Nếu key đó không tồn tại thì trả về NULL.
String getProperty(String key, String defaultProperty) Lấy ra giá trị value của của một thuộc tính dựa vào key. Nếu key đó không tồn tại thì trả về defaultProperty.
void list(PrintStream streamOut) Gửi property list tới output stream mà liên kết tới streamOut
void load(InputStream streamIn) Nạp tải dữ liệu từ đối tượng InputStream.
public void load(Reader r) Nạp tải dữ liệu từ đối tượng Reader.
Enumeration propertyNames() Lấy ra tất cả các key – bao gồm cả các key trong property list mặc định
Object setProperty(String key, String value) Thêm một thuộc tính (bao gồm keyvalue) vào trong đối tượng Property
void store(OutputStream streamOut, String description) Ghi các thuộc tính trong đối tượng OutputStream.