File Properties
Java
78
Male avatar

Hades viết ngày 07/01/2017

Vấn đề

Khi làm việc với CSDL hay networks.. . có những thông số thường xuyên thay đổi như tên CSDL, cổng, tài khoản, người dùng, mật khẩu.. .Nếu những thông tin này bạn viết sẵn trong code hệ thống thì có vấn đề đặt ra là nếu muốn thay đổi bạn phải mở file code lên và tìm đến file chúng ta đã cấu hình để thay đổi ? Làm như vậy phức tạp và khá lằng nhằng.

Hướng giải quyết

Thay vì hardcode thì ta sẽ lưu thông tin cấu hình vào 1 file để có thể dễ dàng cho việc thay đổi các thông tin cấu hình.
Trong java cung cấp lớp java.util.Properties cung cấp một số phương thức :

Nạp 1 cặp key/value vào đối tượng Properties từ luồng
Lấy value từ key của nó
Lấy ra danh sách key và value
Lưu properties vào luồng

Cấu trúc file properties

File properties là 1 dạng file text, cách sử dụng rất đơn giản :
#your_comment : với những dòng có ký tự “#” ở đầu dòng thì dòng đấy chính là chú thích của bạn, và khi sử dụng thì những dòng này sẽ được bỏ qua.
key=value : đây là 1 cặp giá trị “key” có giá trị là “value”

Ví Dụ:
#username dang nhap he thong
username=test123
code=16996

Chú ý :

  • key và value viết sát nhau bởi dấu =
  • Key không được chứa khoảng trắng
  • Value có thể chứa khoảng trắng

Demo

package FileProperties;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.Properties;

/**
 *
 * @author Hades
 */
public class PropertiesFile {

    public static void main(String[] args) {
        Properties props = new Properties();
        OutputStream outStream = null;
        InputStream inStream = null;

        writeToPropsFile(props,outStream);
        loadPropsFile(props,inStream);
        printEveryThing(props,inStream);

    }

    private static void writeToPropsFile(Properties props, OutputStream outStream) {
        try {
            outStream = new FileOutputStream("config.properties");
             // Note :Nếu đường dẫn file không được xác định, tập tin sẽ được lưu trong thư mục gốc của project

            props.setProperty("port","8983");
            props.setProperty("user","admin");
            props.setProperty("pass","admin");

            props.store(outStream,null);
        } 
        catch (Exception e) {
            System.out.println(e.getCause());
        }
        finally {
            if(outStream != null) {
                try {
                    outStream.close();
                }
                catch (Exception e) {
                    System.out.println(e.getCause());
                }
            }
        }
    }

    private static void loadPropsFile(Properties props, InputStream inStream) {
        try {
            inStream = new FileInputStream("config.properties");

            props.load(inStream);
            System.out.println(props.get("port"));
            System.out.println(props.get("user"));
            System.out.println(props.get("pass"));

        } 
        catch (Exception e) {
            System.out.println(e.getCause());
        }
        finally {
            if(inStream != null) {
                try {
                    inStream.close();
                } 
                catch (IOException ex) {
                    System.out.println(ex.getCause());
                }
            }
        }
    }

    private static void printEveryThing(Properties props, InputStream inStream) {
        try {
            inStream = new FileInputStream("config.properties");
            props.load(inStream);
            Enumeration<?> e = props.propertyNames();
            while(e.hasMoreElements()) {
                String key = (String) e.nextElement();
                String value = props.getProperty(key);
                System.out.println("KEY: " + key + " - " + "VALUE: "+value);
            }
        } 
        catch (IOException ex) {
            System.out.println(ex.getCause());
        }
    }
}

Run lần lượt từng method kết quả trả về :

config.properties

#Sat Jan 07 23:22:03 ICT 2017
user=admin
port=8983
pass=admin

output

8983
admin
admin

output

KEY: user - VALUE: admin
KEY: port - VALUE: 8983
KEY: pass - VALUE: admin

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

Male avatar

Hades

5 bài viết.
16 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
Male avatar
9 12
Dưới đây là một cách tổ chức thư mục mà mình cho là khá hợp lý. Hi vọng mọi người có thể tham khảo và góp ý :smile: Android_structure ├─ com.abc ...
Hades viết hơn 1 năm trước
9 12
Male avatar
5 2
Những điều cần nhớ Hades 22042017 Đừng dùng lại Đừng sử dụng lại strings cho nhiều màn hình khác nhau. 1. Tưởng tượng rằng bạn có một hộp thoạ...
Hades viết hơn 1 năm trước
5 2
Male avatar
4 0
Giới thiệu RecycleView là một viewGroup mới được giới thiệu trong Android L ( API 21 ). Đây là một viewGroup có chức năng tương tự như ListView nh...
Hades viết hơn 1 năm trước
4 0
Bài viết liên quan
White
0 0
Trong bài viết này, một số hình ảnh hoặc nọi dung có thể bị thiếu do quá trình chế bản. Vui lòng xem nội dung ở blog gốc sau: (Link) (Link), chúng...
programmerit viết gần 3 năm trước
0 0
Male avatar
9 5
Facade Design Patern Facade Patern thuộc vào họ mô hình cấu trúc (structural patern). Facade patern phát biểu rằng : "just provide a unified an...
DuongVanTien viết gần 2 năm trước
9 5
White
4 2
Một số hàm giúp mapping data đơn giản với Groovy Ví dụ với list data như sau: def student1 = name: "Huan", age: 22, gender: "male"] def student...
Tất Huân viết 1 tháng trước
4 2
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


Male avatar
{{userFollowed ? 'Following' : 'Follow'}}
5 bài viết.
16 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!