Java基础IO篇--Properties类

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: Java基础IO篇--Properties类

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情

前言

在日常的开发中,为了增加系统的灵活性和拓展性,我们会把一些经常变动的参数配置抽离出来,放在配置文件中,在项目启动时,灵活的选择需要加载的参数。常见的配置文件形式有Properties类、XML文件和YAML文件。下面我们将介绍一下Properties类,xml和yaml文件后续会陆续介绍的。

一、Properties类的概述

java.util.Properties,底层是一个Map结构,继承于HashTable ,主要用来表示一个持久的属性集。它使用键值结构存储数据,每个键及其对应值都是一个字符串。该类也被许多Java类使用,比如获取系统属性时,System.getProperties 方法就是返回一个Properties对象。 更多时候用于读取配置文件

二、Properties类构造方法

Properties(): 没有默认值的空属性列表。  

三、Properties类基本存取功能方法

  • public Object setProperty(String key, String value):存一对属性,等价于map.put(key,value);
  • public String getProperty(String key): 使用此属性列表中指定的键搜索属性值,等价于map.get(key);
  • public Set<String> stringPropertyNames():所有键的名称的集合,等价于map.keySet();
public class Test {
    public static void main(String[] args) {
        // 创建Properties类的对象
        Properties pp = new Properties();
        // 存数据
        pp.setProperty("driverClass", "com.mysql.jdbc.Driver");
        pp.setProperty("url", "http://localhost:3306/day11_db");
        pp.setProperty("username", "root");
        pp.setProperty("password", "root");
        // 取数据(所有的key)
        Set<String> set = pp.stringPropertyNames();
        // 非空判断
        if (!set.isEmpty()) {
            // 遍历
            for (String key : set) {
                System.out.println("key:" + key + ", value:" + pp.getProperty(key));
            }
        }
    }
}

四、Properties类读取配置文件

Properties类除了能够当做Map使用,还可以与文件(可以是txt文件、可以是properties)进行关联,获得文件里面的数据!

  • void load(InputStream inStream):从输入字节流读取属性列表(键和元素对)。
***要求:将文件放在src目录(类的根路径)下面!***
#资源文件fis.properties内容:
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/day11_db
password=root
username=root
/*
读取配置文件(text类型的)
*/
public class Test {
    public static void main(String[] args) {
        // 创建Properties类的对象
        Properties prop = new Properties();
        // 创建资源文件对应的字节输入流
        try (
                //FileInputStream fis = new FileInputStream("day11_io/src/fis.txt");
                FileInputStream fis = new FileInputStream("day11_io/src/fis.properties");
        ) {
            // 让文件对应的的输入流与prop关联
            prop.load(fis);
            // 获得所有的key
            Set<String> set = prop.stringPropertyNames();
            // 判断
            if (!set.isEmpty()) {
                // 遍历
                for (String key : set) {
                    // 获得值
                    String value = prop.getProperty(key);
                    // 打印输出
                    System.out.println(key + "对应的值是:" + value);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

扩展:使用ResourceBundle类读取properties配置文件

  • static ResourceBundle getBundle(String baseName) : 通过读取在src下面的properties文件的名称(不要扩展名),得到一个ResourceBundle对象!
  • String getString(String key): 获得指定key对应的value值 【driverClass=com.mysql.jdbc.Driver,只要将driverClass作为参数,就可以得到值!】
/*
     ResourceBundle类:
    读取properties配置文件!
    */
public class Test {
    public static void main(String[] args) {
        // 通过ResourceBundle类的静态方法,得到ResourceBundle类的对象
        ResourceBundle bundle = ResourceBundle.getBundle("fis"); // 只要给定properties配置文件的名称,不要扩展名!
        // 获得指定参数的值
        String driverClass = bundle.getString("driverClass");
        String url = bundle.getString("url");
        String username = bundle.getString("username");
        String password = bundle.getString("password");
        System.out.println(driverClass);
        System.out.println(url);
        System.out.println(username);
        System.out.println(password);
    }
}

后记

在我们的日常开发中,底层的框架就已经将Properties配置文件的信息在系统初始化时就加载进系统了,不需要要我们操作,了解即可。

喜欢我的文章的朋友点点喜欢、收藏,也欢迎朋友们评论区留下你的意见和建议,恕毅在此拜谢!


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
33 3
|
1天前
|
人工智能 安全 Java
Java8 - LocalDateTime时间日期类使用详解
Java8 - LocalDateTime时间日期类使用详解
|
2天前
|
安全 Java 程序员
|
3天前
|
Java
Java Class类
Java Class类
8 0
|
10天前
|
Java 编译器
Java Character 类
4月更文挑战第13天
|
10天前
|
存储 Java
Java基础教程(7)-Java中的面向对象和类
【4月更文挑战第7天】Java是面向对象编程(OOP)语言,强调将事务抽象成对象。面向对象与面向过程的区别在于,前者通过对象间的交互解决问题,后者按步骤顺序执行。类是对象的模板,对象是类的实例。创建类使用`class`关键字,对象通过`new`运算符动态分配内存。方法包括构造函数和一般方法,构造函数用于对象初始化,一般方法处理逻辑。方法可以有0个或多个参数,可变参数用`类型...`定义。`this`关键字用于访问当前对象的属性。
|
14天前
|
Java Shell
Java 21颠覆传统:未命名类与实例Main方法的编码变革
Java 21颠覆传统:未命名类与实例Main方法的编码变革
13 0
|
1月前
|
存储 Java 数据处理
|
1月前
|
Java API
java中IO与NIO有什么不同
java中IO与NIO有什么不同
|
3月前
|
存储 Java 数据安全/隐私保护
从零开始学习 Java:简单易懂的入门指南之IO字符流(三十一)
从零开始学习 Java:简单易懂的入门指南之IO字符流(三十一)