Java入坑之 Properties配置文件

一、相关概念

1.1基础概念

Properties文件是java中很常用的一种配置文件,文件后缀为“.properties”,属文本文件,文件的内容格式是“键=值”的格式,可以用“#”作为注释,java编程中用到的地方很多,运用配置文件,可以便于java深层次的解耦。例如java应用通过JDBC连接数据库时,通常需要在代码中写数据库连接字符串,下面贴出java通过JDBC连接数据库的代码(以mysql为例):

String driver="com.mysql.jdbc.Driver";//mysql提供的Driver接口的实现类
String jdbcUrl="jdbc:mysql:///user";//此处为"jdbc:mysql://localhost:3306/user"的简化形式,user为数据库名
String user="root";
String password="451535";
Class.forName(driver);//通过反射动态实例化mysql数据库驱动类
Connection conn= DriverManager.getConnection(jdbcUrl,user,password);
1234567

 以上代码连接mysql数据库没有任何问题,但是我想换成Oracle数据库,问题就来了,不是不能改,而是我必须得到java源代码中修改代码,这样的硬代码耦合在java中一般不这么做(菜鸟程序员有可能)。所以,为了达到解耦的目的,我们可以用配置文件来储存数据库的连接字符串。下面贴一份保存数据库连接字符串的properties配置文件 jdbc.properties:

driver=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/user
user=root
password=451535

 这样我们就可以通过加载properties配置文件来连接数据库,达到深层次的解耦目的,如果想要换成oracle或是DB2,我们只需要修改配置文件即可,不用修改任何代码就可以更换数据库。

 1.2应用场景

.properties文件常用来记录引用地址的常用信息,例如:包含应用软件的配置信息,简单的数据信息,数据库驱动地址信息,与其他程序交互时所需要的链接地址等等

1.3快速入门

  1. 注释: .properties 文件支持以 # 或 ! 开头的注释行。注释行中的文本会被忽略。
  2. 空格和换行: .properties 文件中的属性键和属性值之间可以用 = 或 : 分隔。属性键和属性值之间的空格会被忽略,但属性值中的空格会保留。
  3. 转义字符: 特殊字符(如等号、冒号、空格等)在属性值中可以使用转义字符来表示。例如:\=, \:, \ , 等。
  4. UTF-8 编码: .properties 文件通常使用 UTF-8 编码来支持特殊字符和多语言。
  5. 资源束(ResourceBundle): Java提供了 ResourceBundle 类来加载 .properties 文件,以便在多语言应用程序中提供本地化支持。
  6. 默认属性: 你可以在 .properties 文件中设置默认属性值。当查找某个属性值时,如果未找到对应的键,将返回默认值。
  7. 相对路径和绝对路径: 在指定文件名时,可以使用相对路径或绝对路径。相对路径从项目根目录开始,但最好提供绝对路径以确保正确性。
  8. 使用 Java 代码生成 .properties 文件: 你也可以使用 Java 代码来生成 .properties 文件,从而实现动态配置。
  9. 异常处理: 在读取或写入 .properties 文件时,需要处理可能发生的 IOException 异常,以确保代码的稳定性。
  10. .xml 格式: 虽然 .properties 文件是常见的配置文件格式,但你也可以使用 .xml 格式来存储配置信息,Java 也提供了相应的类来处理。

二、代码详解

2.1读取.properties文件

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

public class PropertiesReader {
    public static void main(String[] args) {
        // 创建一个 Properties 对象来存储属性键值对
        Properties properties = new Properties();
        
        try {
            // 打开文件输入流,加载属性文件内容
            FileInputStream fileInputStream = new FileInputStream("example.properties");
            properties.load(fileInputStream); // 将属性文件内容加载到 Properties 对象中
            fileInputStream.close(); // 关闭文件输入流,释放资源
            
            // 从 Properties 对象中获取指定键的属性值
            String value = properties.getProperty("key");
            
            // 打印属性值
            System.out.println("Value: " + value);

        } catch (IOException e) {
            // 如果发生异常,打印异常信息
            e.printStackTrace();
        }
    }
}

2.2修改.properties文件

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

public class PropertiesModifier {
    public static void main(String[] args) {
        try {
            // 加载属性文件
            FileInputStream fileInputStream = new FileInputStream("example.properties");
            Properties properties = new Properties();
            properties.load(fileInputStream); // 将属性文件内容加载到 Properties 对象中
            fileInputStream.close(); // 关闭文件输入流,释放资源
            
            // 修改属性值
            properties.setProperty("key", "new_value"); // 使用 setProperty 方法更新属性的值
            
            // 保存更改回属性文件
            FileOutputStream fileOutputStream = new FileOutputStream("example.properties");
            properties.store(fileOutputStream, "Updated by PropertiesModifier"); // 保存更改到属性文件
            fileOutputStream.close(); // 关闭文件输出流,释放资源

            System.out.println("Property value updated successfully.");

        } catch (IOException e) {
            // 如果发生异常,打印异常信息
            e.printStackTrace();
        }
    }
}

2.3具体场景

2.3.1数据库

下面是一个示例应用场景:存储数据库连接信息的配置文件。

假设你正在开发一个Java应用程序,该程序需要连接到数据库来执行一些操作。而数据库的连接信息(如数据库URL、用户名、密码等)不宜硬编码在代码中,因为这些信息可能在不同的环境中发生变化(例如,开发、测试、生产环境),而且如果需要修改连接信息,就需要修改源代码,这并不方便。

这时,可以使用一个.properties文件来存储数据库连接信息,然后在应用程序中读取这些信息

# Database Configuration
db.url=jdbc:mysql://localhost:3306/mydb
db.username=myuser
db.password=mypassword

 Java程序来读取这个.properties文件中的数据库连接信息:

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

public class DatabaseConfigReader {
    public static void main(String[] args) {
        // 创建一个 Properties 对象来存储配置信息
        Properties properties = new Properties();
        
        try {
            // 加载数据库配置文件
            FileInputStream fileInputStream = new FileInputStream("database.properties");
            properties.load(fileInputStream); // 将配置文件内容加载到 Properties 对象中
            fileInputStream.close(); // 关闭文件输入流,释放资源
            
            // 从 Properties 对象中获取数据库连接信息
            String dbUrl = properties.getProperty("db.url");
            String dbUsername = properties.getProperty("db.username");
            String dbPassword = properties.getProperty("db.password");
            
            // 使用获取到的数据库连接信息进行连接
            System.out.println("Connecting to database...");
            System.out.println("URL: " + dbUrl);
            System.out.println("Username: " + dbUsername);
            // 注意:密码通常不应该直接打印,这里仅为演示目的
            System.out.println("Password: " + dbPassword);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 properties文件来存储数据库连接信息,并在Java程序中读取这些信息。这种方法使得在不同环境中轻松更改连接信息,而无需修改源代码。当你需要连接到不同的数据库或更改数据库访问凭据时,只需更新.properties文件而不必重新编译你的Java应用程序。

2.3.2多语言

国际化(i18n)支持。当你的应用需要支持多种语言和地区时,可以使用.properties文件来存储不同语言的文本翻译。 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烟雨平生9527

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值