Java Property类使用详解

在Java中,经常需要进行属性配置操作,而Java的Property类正是用来读写属性文件的。本文将详细讲解Java Property类的使用。

Java Property类使用详解

在Java中,经常需要进行属性配置操作,而Java的Property类正是用来读写属性文件的。本文将详细讲解Java Property类的使用。

创建属性文件

属性文件通常以".properties"为后缀,用于存储键值对的配置信息。我们可以用文本编辑器手动创建属性文件,格式如下:

# This is a comment
name=Tina
age=18

加载属性文件

Java Property类可以用于读取和写入属性文件,我们可以通过以下代码来加载属性文件:

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

public class PropertyDemo {

    public static void main(String[] args) {

        Properties prop = new Properties();
        InputStream input = null;

        try {

            input = new FileInputStream("config.properties");

            // 加载属性文件
            prop.load(input);

            // 获取属性值
            String name = prop.getProperty("name");
            String age = prop.getProperty("age");

            System.out.println("Name: " + name);
            System.out.println("Age: " + age);

        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

}

上面的代码将读取"config.properties"属性文件,并输出其中的"Name"和"Age"属性值。需要注意的是,属性文件必须放在Java项目的根目录中,否则需要使用文件的绝对路径。

写入属性文件

我们可以使用下面的代码来写入属性文件:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Properties;

public class PropertyWriteDemo {

    public static void main(String[] args) {

        Properties prop = new Properties();
        OutputStream output = null;

        try {

            output = new FileOutputStream("config.properties");

            // 设置属性值
            prop.setProperty("name", "Tina");
            prop.setProperty("age", "18");

            // 写入属性文件
            prop.store(output, null);

            System.out.println("Write to properties file succeeded.");

        } catch (IOException io) {
            io.printStackTrace();
        } finally {
            if (output != null) {
                try {
                    output.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

}

上面的代码将在项目的根目录下创建或覆盖"config.properties"文件,并将"name"和"age"属性写入该文件中。

示例说明

示例一

假设我们需要在一个Java Web项目中读取数据库的连接信息,我们可以将连接信息写入属性文件,然后使用Property类进行读取。

属性文件:

# database properties
db.url=jdbc:mysql://localhost:3306/mydatabase
db.username=root
db.password=admin

Java代码:

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

public class DatabaseUtil {

    private Properties prop = null;

    public DatabaseUtil(String filename) {

        prop = new Properties();
        InputStream input = null;

        try {

            input = new FileInputStream(filename);
            prop.load(input);

        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

    public String getUrl() {
        return prop.getProperty("db.url");
    }

    public String getUsername() {
        return prop.getProperty("db.username");
    }

    public String getPassword() {
        return prop.getProperty("db.password");
    }

}

示例二

假设我们需要在一个Java项目中将日志信息写入属性文件中,我们可以使用Property类的方法来实现。另外,我们还可以将属性文件中的日志级别动态配置,从而方便地进行日志级别调整。

属性文件:

# logging properties
log.level=INFO
log.output=file
log.file.path=/var/log/app.log

Java代码:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Properties;

public class LogUtil {

    private static Properties prop = null;

    public static void setLogLevel(String level) {

        if (prop == null) {
            prop = new Properties();
        }

        OutputStream output = null;

        try {

            output = new FileOutputStream("log.properties");
            prop.setProperty("log.level", level);
            prop.store(output, null);

        } catch (IOException io) {
            io.printStackTrace();
        } finally {
            if (output != null) {
                try {
                    output.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

    public static void log(String message) {

        if (prop == null) {
            prop = new Properties();
        }

        InputStream input = null;

        try {

            input = new FileInputStream("log.properties");
            prop.load(input);
            String level = prop.getProperty("log.level");

            if ("INFO".equals(level)) {
                System.out.println("INFO: " + message);
            } else if ("DEBUG".equals(level)) {
                System.out.println("DEBUG: " + message);
            } else if ("ERROR".equals(level)) {
                System.out.println("ERROR: " + message);
            }

        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

}

上述示例代码演示了如何将日志信息写入"log.properties"属性文件中,并根据动态配置的日志级别输出日志信息。

本文标题为:Java Property类使用详解

基础教程推荐