Property文件定义

属性文件(Property file)是一种常用的配置文件格式,它通常包含键值对,用于存储应用程序的配置信息。 属性文件以.properties为扩展名,可以使用任何文本编辑器来创建和编辑。

常见数据库配置: 属性文件中每个键值对都以“键=值”的形式表示,其中键和值都是字符串,用等号连接。例如:

database.url=jdbc:mysql://localhost:3306/mydb
database.username=root
database.password=password123
复制代码

某个对象里的属性使用 ·号 来获取,并用=来给它赋值。

这样的配置文件还是比较简单的,经常来Java的springboot文件配置可以看到

Java读取Property文件

Java包里有专门处理property文件的包 java.util.Properties;

配置文件property

database.data = 500
database.name = learnOnWeb
复制代码

Main文件

public class Main {
    public static void main(String[] args) {
        // 初始化Property对象
        // new之后的Property文件是一个拥有map集合的对象,之后我们需要的键值对就放在该map里面
        Properties props = new Properties();
        try {
            // 加载配置文件
            // 我用绝对路径读不到,但是用绝对路径可以,如果大家读取失败可以试试全局路径     
            props.load(new FileInputStream("D:\works\untitled2\src\main\java\property\property.properties"));
            // 调用getProperty去获取属性值
            String name = props.getProperty("database.name");
            String data = props.getProperty("database.data");
            System.out.println("name: " + name);
            System.out.println("data: " + data);
            // 读取文件之后可以进行操作了,比如通过反射来生成类。
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
复制代码

Java修改XML文件

修改文件也不难,使用setProperty去设置就好了,然后将其输出到文件中(调用store函数,第一个参数为输出流,第二个参数为注释的内容)

public class Main {
    public static void main(String[] args) throws IOException {
        // 创建一个Properties对象并加载文件
        Properties props = new Properties();
        FileInputStream in = new FileInputStream("D:\works\untitled2\src\main\java\property\property.properties");
        props.load(in);
        in.close();

        // 修改属性值
        props.setProperty("database.data", "100");

        // 添加新属性
        props.setProperty("database.url", "localhost");

        // 保存修改后的属性到文件中
        FileOutputStream out = new FileOutputStream("D:\works\untitled2\src\main\java\property\after" +
                ".properties");
        // 第二个参数时为修改添加注释
        props.store(out, "Updated properties");
        out.close();
    }
}
复制代码

小贴士

当property文件中拥有非ISO-8859-1码的字符时,我们可以选择使用UTF-8 去读取。但是FileInputStream流是按字节读取的,因此我们要换一种编码方式的话,需要使用装饰类InputStreamReader去装饰,使用如下:

FileInputStream读取配置文件将其转化为字节数组后,我们使用 new InputStreamReader(将字节流转化为字符流)去读取,这个类可以去指定编码方式UTF-8或其它,这样我们在读取字符时可以防止乱码。

又出现一个问题: 我们的Property文件是ISO-8859-1标准编码, 并不能读取中文,我们要读取中文可以手动将该配置文件的编码方式换为UTF-8

比如: 当配置文件properties文件中含有中文时,改成这样就好了

这里是配置文件的内容

database.name=我是中国人
database.data=500
复制代码

主类:

public class Main {
    public static void main(String[] args) throws IOException {
        // 创建一个Properties对象并加载文件
        Properties props = new Properties();
        FileInputStream in = new FileInputStream("D:\works\untitled2\src\main\java\property\property.properties");
        props.load(new InputStreamReader(in, "UTF-8"));
        in.close();

        // 修改属性值
        props.setProperty("database.name", "倒萨倒萨");

        // 添加新属性
        props.setProperty("database.url", "localhost");

        // 保存修改后的属性到文件中
        FileOutputStream out = new FileOutputStream("D:\works\untitled2\src\main\java\property\after" +
                ".properties");
        props.store(new OutputStreamWriter(out, "UTF-8"), "Updated properties");
        out.close();
    }
}

作者:按时交作业