Properties

本文介绍Java中Properties类的基本用法,包括如何使用.properties配置文件、编程解析配置信息及常见方法。Properties类继承自Hashtable,用于处理字符串类型的键值对。

类定义

public class Properties extends Hashtable<Object,Object>

Properties中key和value都是String类型,Properties没有泛型约束,但是key和value都是String类型,用来读配置文件(.properties资源文件、xml配置文件)

1、使用后缀为.properties配置文件
        语法规则:  key=value 前面是固定的配置项名称,等号是唯一的符号[# 是注释符],等号后就是配置信息
        properties文件中只能使用单字节编码的内容,如果需要使用中文,则需要进行编码转换
        JDK提供的转换工具为native2scii或者直接使用IDE工具中提供的插件,例如输入中文【说明信息】则显示为【\u8BF4\u660E\u4FE1\u606F】
例如配置文件  当前文件夹下 jdbc.properties
        name=\u6768\u56FD\u98DE
        age=18
        sex=false

2、编程解析配置信息
        Properties ps=new Properties();
        //通过Properties对象提供的方法读取配置文件,并自动进行解析
        ps.load(is);
        //调用ps对象的getProperty方法获取指定配置项的配置值
        String ss=ps.getProperty("name");

常用方法

setProperty(String key,String value)        调用Hashtable的方法put

getProperty(String key)        用指定的键在此属性列表中搜索属性,如果没有对应的key配置,则返回null

getProperty(String key, String defaultValue)        用指定的键在属性列表中搜索属性,如果没有对应的key,则defaultValue生效

load(InputStream inStream)        从输入流中读取属性列表(键和元素对)


load(Reader reader)        按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)

loadFromXML(InputStream in)        将指定输入流中由 XML 文档所表示的所有属性加载到此属性表中。 具体应用开发中一般使用DOM4j或者JAXP之类的工具

store(OutputStream out, String comments)        以适合使用 load(InputStream)方法加载到 Properties 表中的格式,将此Properties 表中的属性列表(键和元素对)写入输出流


store(Writer writer, String comments)        以适合使用 load(Reader) 方法的格式,将此 Properties 表中的属性列表(键和元素对)写入输出字符

storeToXML(OutputStream os, String comment)        发出一个表示此表中包含的所有属性的 XML 文档

storeToXML(OutputStream os, String comment, String encoding)        使用指定的编码发出一个表示此表中包含的所有属性的 XML 文档

示例代码如下

import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class TestProperties {
	public static void main(String[] args) throws IOException {
		//使用当前类的类加载器获取jdbc.properties的输入流,要求properties和当前类必须在同一个文件夹下
		InputStream is=TestProperties.class.getResourceAsStream("jdbc.properties");
		//构建Properies对象
		Properties ps=new Properties();
		ps.setProperty("name1", "全冠清");
		//通过Properties对象提供的方法读取配置文件,并自动进行解析
		ps.load(is);
		//调用ps对象的getProperty方法获取指定配置项的配置值
		String ss=ps.getProperty("name");
		System.out.println(ss);
		//所有的配置内容只能以String类型进行接收,如果其它类型需要自行编码转换
		
		ss=ps.getProperty("name1");
		System.out.println(ss);
		
		// 所有的配置内容只能以String类型进行接收,如果其它类型需要自行编码转换
		
		ss=ps.getProperty("age");
		int age=Integer.parseInt(ss.trim());
		System.out.println(age);
		
		ss=ps.getProperty("\u773C\u775B");
		System.out.println(ss);
		
		ss=ps.getProperty("\u6027\u522B");
		System.out.println(ss);
		
		ps.store(new FileWriter("bb.bak"), "说明信息");
		
	}
}

在IT领域中,“properties”通常指的是用于配置和存储应用程序设置的一种机制,尤其是在Java生态系统中。它们广泛应用于各种框架和技术栈中,用来管理外部化配置数据。 ### Properties 文件的基础知识 Properties文件是一种简单的键值对形式的数据存储方式,在Java平台下尤为常见。这些文件一般具有`.properties`扩展名,并且遵循特定的格式规则- 键值对之间使用等号 `=` 或者冒号 `:` 分隔; - 可以通过井号 `#` 添加注释; - 支持 Unicode 字符集编码,常采用 ISO 8859-1 编码标准; 例如一个基本的 properties 文件可能看起来像这样: ```properties app.name=MyApplication app.version=1.0.0 database.url=jdbc:mysql://localhost:3306/mydb ``` #### 组织结构 为了便于管理和维护大型项目中的多个配置项,建议采取以下几种策略来组织 properties 文件- **按功能/模块划分**:为每一个主要的功能区域创建单独的属性文件,比如数据库连接参数放在 `database.properties` 中,而邮件服务相关的设定则保存至 `email-service.properties`。 - **命名空间设计**:即使不拆分成多个物理文件,也可以通过对相似用途但属于不同组件的条目加上前缀的方式模拟逻辑上的隔离效果。如 `payment.gateway.apiKey` 和 `notification.sms.providerApiKey` 这样的模式可以帮助避免潜在的名字冲突问题 [^2]。 - **标准化书写规范**:制定统一的命名约定(全小写加点分隔)、保持一致性是非常重要的实践之一。此外还应该注意缩进美观以及适当加入说明文字帮助其他同事理解每一条记录的意义所在 [^2]。 ### Java 应用程序里读取 Properties 的方法 利用 Java 自带的标准库即可轻松完成对 `.properties` 类型文档的操作任务。下面展示了一个典型的例子演示如何加载并访问其中的内容: ```java import java.io.InputStream; import java.util.Properties; public class PropertyReader { public static void main(String[] args) throws Exception { InputStream input = null; try { String filename = "config.properties"; input = PropertyReader.class.getClassLoader().getResourceAsStream(filename); if(input == null){ System.out.println("Sorry, unable to find " + filename); return; } Properties prop = new Properties(); prop.load(input); // get the property value and print it out System.out.println(prop.getProperty("app.name")); System.out.println(prop.getProperty("app.version")); } finally{ if(input!=null){ input.close(); } } } } ``` 这段代码首先尝试从类路径下的资源目录获取名为 `config.properties` 的输入流对象,接着调用了 `load()` 方法将其内容解析到内存里的 `Properties` 实例当中去。之后就可以随意查询任意给定关键字所对应的字符串数值啦! ### Spring Boot 对 Configuration Properties 的处理能力增强 随着微服务架构日益普及,传统意义上的硬编码式的静态变量已经难以满足复杂业务需求的变化速度了。为此,Spring Framework 提供了一系列高级抽象层使得我们可以更加灵活高效地操控运行时刻的行为表现——特别是当涉及到大量可变因素的时候更是如此重要不可忽视的存在价值体现之处 [^3]。 具体而言,《Spring Boot》不仅允许我们直接注入原始类型的简单量度指标(布尔标志开关、整数计数器等等),还能自动绑定整个 POJO 结构体实例呢!只需几个额外依赖包配合少量样板代码就能让原本散落在各处的手动初始化过程变得异常简洁明快起来。 假设现在有一个专门负责控制台日志输出级别的定制 Bean 定义如下所示: ```java @ConfigurationProperties(prefix="logging.console") @Component @Data @NoArgsConstructor @AllArgsConstructor @Builder public class ConsoleLoggerConfig implements Serializable { private boolean enabled; /** * Level can be TRACE, DEBUG, INFO, WARN or ERROR. */ private String level; } // application.yml snippet logging: console: enabled: true level: info ``` 这里借助了 Lombok 插件自动生成 getter/setter 等冗余模板语句从而大幅削减源码体积的同时也提升了整体可读性能。一旦激活该 bean 后续任何地方都可以安全无虞地享用这份预设好的全局状态信息咯~ ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值