Java源码类 - Properties类及多种读取方式

简介: Java源码类 - Properties类及多种读取方式

Java源码类 - Properties类

一、Properties概述

Properties是JDK1.0中引入的java类,在项目中大量使用。表示一个持久的属性集,可以保证在流中或从流中加载,属性列表中每个键及其值都是一个字符串

主要作用:通过修改配置文件可以方便的修改代码中的参数,实现不用改class文件即可灵活变更参数。

二、Properties类图

java.util.Properties继承自java.util.Hashtable,是一个持久化的属性保存对象,可以将属性内容写出到可以将属性内容写出到stream中或者从stream中读取属性内容。

三、Properties重要特性

  1. 在底层的Hashtable中,每一对属性的key和value都是按照string类型来保存的;
  2. Properties支持文本方式和xml方式的数据存储。在文本方式中,格式为key:value,其中分隔符可以是:冒号(😃、等号(=)、空格。其中空格可以作为key的结束,同时获取的值回将分割符号两端的空格去掉;
  3. Properties可以将其他的Properties对象作为默认的值;
  4. Hashtable的所有方法Properties对象均可以访问,但是不建议这么做,因为Hashtable可以存放其他数据类型,这样会导致Properties一些方法调用报错;
  5. 在properties文件中,可以用井号"#"来作注释;
  6. 线程安全;
  7. key、value不可以是Null;

四、Properties主要的方法

方法名 方法说明 备注
setProperty(String key,String value) 向Properties对象中添加参数和值 -
getProperty(String key) 获取指定参数值
load(InputStream in) 以字节输入流加载配置文件到对象中
load(Reader in) 以字符输入流加载配置文件到对象中
store(OutputStream out,String comments) 以字节输出流将对象中的内容输出到配置文件中
store(Writer out, String comments) 以字符输出流将对象中的内容输出到配置文件中

五、Properties六种读取方法

5.1 使用java.util.Properties类的load()方法
public  void runProperties(){
    try {
          String path_properties=  this.getClass().getClassLoader().getResource("customer.properties").getPath();
          InputStream inputStream = new BufferedInputStream(new FileInputStream(path_properties));
          Properties p = new Properties();
          p.load(inputStream);
          System.out.println(p.getProperty("goyeer.name"));
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
5.2 使用java.util.ResourceBundle类的getBundle()方法
public void runResourceBundle(){
        try {
            Locale locale = new Locale("zh", "CN");
            ResourceBundle resource = ResourceBundle.getBundle("customer",locale);
            String gy_name = resource.getString("goyeer.name");
            System.out.println(gy_name);
        }catch (Exception ex){
            System.out.println(ex.getMessage());
        }
 }
5.3 使用java.util.PropertyResourceBundle类的构造函数
public  void runPropertyResourceBundle(){
        try {
            String path_properties=  this.getClass().getClassLoader().getResource("customer.properties").getPath();
            InputStream inStream = new BufferedInputStream(new FileInputStream(path_properties));
            ResourceBundle rb = new PropertyResourceBundle(inStream);
            String gy_name = rb.getString("goyeer.name");
            System.out.println(gy_name);
        }catch (Exception exception){
            System.out.println(exception.getMessage());
        }
    }
5.4 使用class变量的getResourceAsStream()方法
public void runJProperties(){
       try
       {
           InputStream in = this.getClass().getResourceAsStream("/customer.properties");
           Properties p = new Properties();
           p.load(in);
           String gy_name = p.getProperty("goyeer.name");
           System.out.println(gy_name);
       }catch (Exception exception){
           System.out.println(exception.getMessage());
       }
    }
5.5 使用class.getClassLoader()所得到的java.lang.ClassLoader的getResourceAsStream()方法
public void runClassLoaderAndStream(){
        try {
            InputStream in = this.getClass().getClassLoader().getResourceAsStream("customer.properties");
            Properties p = new Properties();
            p.load(in);
            String gy_name = p.getProperty("goyeer.name");
            System.out.println(gy_name);
        }catch (Exception exception){
            System.out.println(exception.getMessage());
        }
    }
5.6 使用java.lang.ClassLoader类的getSystemResourceAsStream()静态方法
public void runClassLoaderAndSystemResourceAsStream() {
        try {
            InputStream in = ClassLoader.getSystemResourceAsStream("customer.properties");
            Properties p = new Properties();
            p.load(in);
            String gy_name = p.getProperty("goyeer.name");
            System.out.println(gy_name);
        } catch (Exception exception) {
            System.out.println(exception.getMessage());
        }
    }
5.6 在Servlet中可以使用javax.servlet.ServletContext的getResourceAsStream()方法
public void runServletContext(ServletContext context){
        try {
            String path=  this.getClass().getClassLoader().getResource("customer.properties").getPath();
            InputStream in = context.getResourceAsStream(path);
            Properties p = new Properties();
            p.load(in);
            String gy_name = p.getProperty("goyeer.name");
            System.out.println(gy_name);
        }catch (Exception exception){
            System.out.println(exception.getMessage());
        }
    }

对应properties文件操作的方法比较多,根据不同的场景选择适合的方法。


目录
相关文章
|
3天前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
3天前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
|
7天前
|
Java
Java的原子变量类
Java的原子变量类
17 8
|
3天前
|
存储 Java 编译器
java wrapper是什么类
【10月更文挑战第16天】
11 3
|
2天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
6天前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
17 5
|
6天前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
11 3
|
5天前
|
移动开发 前端开发 JavaScript
java家政系统成品源码的关键特点和技术应用
家政系统成品源码是已开发完成的家政服务管理软件,支持用户注册、登录、管理个人资料,家政人员信息管理,服务项目分类,订单与预约管理,支付集成,评价与反馈,地图定位等功能。适用于各种规模的家政服务公司,采用uniapp、SpringBoot、MySQL等技术栈,确保高效管理和优质用户体验。
|
6天前
|
Java
在Java多线程编程中,实现Runnable接口通常优于继承Thread类
【10月更文挑战第20天】在Java多线程编程中,实现Runnable接口通常优于继承Thread类。原因包括:1) Java只支持单继承,实现接口不受此限制;2) Runnable接口便于代码复用和线程池管理;3) 分离任务与线程,提高灵活性。因此,实现Runnable接口是更佳选择。
19 2
|
6天前
|
Java
Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口
【10月更文挑战第20天】《JAVA多线程深度解析:线程的创建之路》介绍了Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口。文章详细讲解了每种方式的实现方法、优缺点及适用场景,帮助读者更好地理解和掌握多线程编程技术,为复杂任务的高效处理奠定基础。
16 2