属性文件(Properties files)知识
目录
properties文件特点
Properties类的重要方法
属性文件的应用场景?
Java如何读取属性文件?
Java 读取 .properties 配置文件的几种方式
如何在Spring容器中使用属性文件?
.properties文件一般放在项目哪个目录下?
属性文件是一种存储键值对的文件格式,以.key=value的形式存储,其中key为属性名,value为属性值。属性文件通常使用.properties作为后缀名,是Java中一种常用的配置文件格式。除了.properties文件之外,还有其他类型的属性文件,包括:
1. XML 属性文件:XML属性文件将用户定义的键值对保存在XML格式中,格式比较严格,支持自定义标签、属性、命名空间等,在一些场景下可以替代properties文件。
2. YAML 属性文件:YAML也是一种配置文件格式,它使用缩进来表示层级关系,不需要使用特殊符号如XML的<>或JSON的{},因此比较易读易写,常被用于服务器端程序的配置文件。
3. JSON 属性文件:与YAML类似,JSON属性文件也是一种比较常见的配置文件格式,支持层级结构和复杂数据类型等特性,可用于Web前端开发、服务端开发等多个领域。这些属性文件格式各有特点,不同的应用场景可以选择不同的属性文件格式。
当涉及到软件开发时,属性文件(Properties files)是一种常见的配置文件格式,它被用来存储应用程序的配置数据。这种文件通常以 key-value 的形式组成,其中 key 和 value 都是字符串类型,中间用等号 "=" 分隔,如 "key=value"。
通常情况下,属性文件比较简单,因此它在多种软件领域得到了广泛应用,例如 Java 技术中,常常用于存储各种参数配置,如数据库连接信息、邮件服务器地址和端口号等等。Java 中的 Properties 类可以用来操作属性文件。
当应用程序需要对不同的环境进行配置时,比如说开发环境、测试环境和生产环境,开发人员可以通过修改属性文件的方式来实现快速切换环境,从而有效地提高开发效率。
什么是属性文件 ?
定义:一个扩展名为properties文件,属性文件都是以key-value(键值对)来保存文件的内容,如:log4j.properties,db.properties等。
oracle.driverClassName=oracle.jdbc.driver.OracleDriver
oracle.dburl=jdbc:oracle:thin:@localhost:1521:orcl
oracle.username=dang
oracle.psw=yeshicheng
1.后缀properties是一种属性文件。
2.这种文件以key=value格式存储内容。
3.一般这个文件作为一些参数的存储,代码就可以灵活一点。
4.通俗点讲就相当于定义一个变量,在这个文件里面定义这些变量的值,在程序里面可以调用这些变量,好处就是,如果程序中的参数值需要变动,直接来改这个.property文件就可以了,不用在去修改源代码。
properties文件特点
1、键值对格式。
2、“ = ”等号后面,值前面,的空格,会自动忽略掉。
3、值后面的空格,不会忽略。
4、“ = ”等号后面的双引号,不会忽略。
5、“ # ”号后面内容,为注释,忽略。
Properties类的重要方法
Properties 类存在于包 Java.util 中,该类继承自 Hashtable
1. getProperty ( String key) , 用指定的键在此属性列表中搜索属性。也就是通过参数 key ,得到 key 所对应的 value。
2. load ( InputStream inStream) ,从输入流中读取属性列表(键和元素对)。通过对指定的文件(比如说上面的 test.properties 文件)进行装载来获取该文件中的所有键 - 值对。以供 getProperty ( String key) 来搜索。
3. setProperty ( String key, String value) ,调用 Hashtable 的方法 put 。他通过调用基类的put方法来设置 键 - 值对。
4. store ( OutputStream out, String comments) , 以适合使用 load 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。与 load 方法相反,该方法将键 - 值对写入到指定的文件中去。comments用来给配置文件添加注释
5.keySet ( ) ,拿到properties中所有的key。
6.clear ( ) ,清除所有装载的 键 - 值对。该方法在基类中提供。
属性文件的应用场景?
企业主要作用和应用范围举例:
1.日志文件信息,一般取名为log4j.properties ;
2 数据库连接信息,一般取名为db.properties;
3.数据源的配置信息(连接池相关信息)
Java如何读取属性文件?
第一步.读取属性文件第一步,创建一个属性文件对象【Properties properties = new Properties();】
第二步.把Resource属性文件转换为一个流对象【有两种方式:1.通过文件输入字节流;2.通过反射技术。】
第三步.向属性文件对象赋值【有两种方式赋值:setProperty(key, value)直接赋值和load(is)一次性加载赋值。】
第四步.获取属性文件中某一个属性的值【getProperty(key)】
package spring201909;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;public class TestReadProperties {
public static void main(String[] args) {
try {
// 第一步.读取属性文件第一步 创建一个属性文件对象
//Properties保存数据和读取数据的底层方式和Hashmap Hashtable一样
//都是key-value方式来保存和通过key来读取数据
Properties properties = new Properties();//第二步.把Resource属性文件转换为一个流对象
//getResourceAsStream中的Resource资源在本例子中指的是属性文件
//当然,在别的例子中还可以是xml,txt等多种资源文件
//BufferedInputStream就是提高读取效率缓冲字节输入流,是输入字节流的包装类
//第一种方法:根据属性文件的路径找到属性文件,并且封装为文件输入字节流
//InputStream is=
// new BufferedInputStream(new FileInputStream("config/properties/db.properties"));
//第二种方法:通过反射中,类对象的getResourceAsStream把资源转换为流对象
InputStream is = new BufferedInputStream(TestReadProperties.class.getResourceAsStream(
"/properties/db.properties"));//第三步.向属性文件对象赋值
// properties.setProperty(key, value)直接赋值异常麻烦而且工作量大
// load等于多次调用setProperty这个方法 把is流对象代表的db.properties文件中的全部key和value一次次的保存到属性文件中
properties.load(is);
// 第四步.获取属性文件中某一个属性的值
System.out.println(properties.getProperty("oracle.driverClassName"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
Java 读取 .properties 配置文件的几种方式
a、基于ClassLoder(类加载器)读取配置文件
注意:
- 配置文件一定要放到当前目录下。
- (目录层次也可以从src下面的文件夹开始但不必包含src,且不必包含反斜杠开头。)
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;public class demo01 {public static void main(String[] args) {Properties properties = new Properties();//使用ClassLoader加载properties配置文件生成对应的输入流InputStream in = demo01.class.getClassLoader().getResourceAsStream("config/config.properties");try {//使用properties对象加载输入流properties.load(in);//根据key获取对应的valueString url = properties.getProperty("url");System.out.println("url:"+url);} catch (IOException e) {e.printStackTrace();}}
}
b、基于 InputStream 读取配置文件
注意:该方式的优点在于可以读取任意路径下的配置文件.
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;public class Demo02 {public static void main(String[] args) {Properties properties = new Properties();try {//使用InputStream流 读取配置文件BufferedReader bufferedReader = new BufferedReader(new FileReader("C:/Users/szwb093/Desktop/config.properties"));//使用properties对象加载输入流properties.load(bufferedReader);//根据key获取对应的valueString url = properties.getProperty("url");System.out.println("url:"+url);} catch (FileNotFoundException e1) {e1.printStackTrace();}catch (IOException e) {e.printStackTrace();}}
}
c、通过 java.util.ResourceBundle 类来读取,这种方式比使用 Properties 要方便一些
通过 ResourceBundle.getBundle() 静态方法来获取(ResourceBundle是一个抽象类),这种方式来获取properties属性文件不需要加.properties后缀名,只需要文件名即可。
//config为属性文件名,放在包config下,如果放在src下(资源文件夹下),直接用config即可
ResourceBundle resource = ResourceBundle.getBundle("config/config");
String url = resource.getString("url");
System.out.println("url:"+url);
如何在Spring容器中使用属性文件?
第一步:加载db.properties属性文件
1.1 首先改变头文件,增加支持context标签的spring-context.xsd文件和xml命名空间【xmlns:context="http://www.springframework.org/schema/context"】【http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd】
1.2 添加context标签,将properties文件加载到上下文环境中【<context:property-placeholder location="classpath:properties/db.properties"/>】
第二步:通过表达式获取属性文件中的值,实现注入【${key}】
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 如何让spring容器来帮助baseDao完成属性文件和baseDao中的属性对象properties关联起来 -->
<!-- 第一步:加载db.properties属性文件
1.1 首先改变头文件,增加支持context标签的spring-context.xsd文件【xmlns:context="http://www.springframework.org/schema/context"】
1.2 添加context标签,将properties文件加载到上下文环境中【<context:property-placeholder location="classpath:properties/db.properties"/>】
classpath:代表对应编译之后的目录 如果是java工程代表bin目录,如果是web工程 WebRoot\\WEB-INF\\classes目录
properties/db.properties:代表准备从bin目录或者classes目录找到properties/db.properties
-->
<context:property-placeholder location="classpath:properties/db.properties"/>
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<!-- 支持一次性导入多个属性文件,一般而言就直接一次性多个导入即可 -->
<value>classpath:properties/db.properties</value>
<value>classpath:properties/log4j.properties</value>
</list>
</property>
</bean>
<!-- 第二步:通过这个dao来完成属性对象的注入 -->
<bean id="studentJdbcDaoImpl" class="com.yijng.dao.impl.StudentJdbcDaoImpl">
<property name="properties">
<props>
<prop key="driverClassName">${oracle.driverClassName}</prop>
<prop key="dburl">${oracle.dburl}</prop>
<prop key="username">${oracle.username}</prop>
<prop key="psw">${oracle.psw}</prop>
<prop key="log4j">${log4j.infolevel}</prop>
</props>
</property>
</bean>
</beans>
.properties文件一般放在项目哪个目录下?
.properties
文件通常被用于存储应用程序的配置信息。在 Java 项目中,.properties
文件一般放在src/main/resources
目录下。
src/main/resources
目录是 Maven 等构建工具的默认资源目录,它会将该目录下的资源文件打包到最终生成的 JAR 或 WAR 包中。这样,应用程序就可以在运行时访问.properties
文件了。如果需要根据不同环境使用不同的配置文件,可以在
src/main/resources
目录下创建不同的配置文件,如:
application-dev.properties
:开发环境配置文件application-prod.properties
:生产环境配置文件在运行时,根据需要选择对应的配置文件,例如通过设置系统环境变量或命令行参数来指定使用的配置文件。
在 Java 项目中,
.properties
文件通常用于存储应用程序的配置信息。由于.properties
文件的格式简单、易读易写,它被广泛用于 Java 技术中。Java 的集合库提供了
Properties
类来读写.properties
文件。通过Properties
类,可以方便地读取、修改、保存配置文件中的属性信息,如数据库连接字符串、端口号等等。
.properties
文件一般放置在src/main/resources
目录下,这样它们就能够被打包到最终生成的 JAR 或 WAR 包中,在应用程序运行时被访问到。在 Spring 等框架中,使用
.properties
文件可以轻松地实现应用程序的参数配置和国际化。开发人员可以根据需要创建不同的配置文件,如application-dev.properties
和application-prod.properties
,并在应用程序中读取和使用这些配置信息。
参考链接:
Spring Boot Reference Documentation
使用Properties - 廖雪峰的官方网站