摘要:在java项目中经常会使用到配置文件,这里就介绍几种加载配置文件的方法。

本文分享自华为云社区《【Java】读取/加载 properties配置文件的几种方法》,作者:Copy工程师。

说明

在java项目中经常会使用到配置文件,这里就介绍几种加载配置文件的方法

目录结构

我是使用的maven搭建的项目,resources其实就是在根目录下
配置文件很简单

一、 基于ClassLoader读取配置文件

注意:有局限性只能在类路径下比较方便

Properties properties = new Properties();
// 注意这里的路径是根据根目录写的
InputStream in = ReadProperties.class.getClassLoader().getResourceAsStream("conf/demo.properties");
properties.load(in);
System.out.println("1111111111111---->:"+properties.getProperty("name")); 输出:
1111111111111---->:xing

二、基于InputStream读取配置文件

Properties properties2 = new Properties();
// 以下两种获取文件流的方式都可以,对于小文件第一种更快一点 // 通过BufferedReader获取文件流
try (BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath))) {
properties2.load(bufferedReader);
System.out.println("22222222222---->:"+properties2.getProperty("name"));
}catch (Exception e){
e.printStackTrace();
}
// 通过FileInputStreamm获取文件流
InputStream in2 = new FileInputStream(new File(filePath));
properties2.load(in2);
System.out.println("22222222222---->:"+properties2.getProperty("name")); 输出:
22222222222---->:xing
22222222222---->:xing

三、基于ResourceBundle读取配置文件

// 1. 通过ResourceBundle.getBundle() 静态方法来获取文件 这种方式不需要添加后缀名
// 注意这里的ResourceBundle.getBundle("conf/demo") 这里不需要写配置文件的后缀 只需要名字即可 xml没试过 这里是properties
ResourceBundle resourceBundle = ResourceBundle.getBundle("conf/demo");
System.out.println("333333333333----->:"+resourceBundle.getString("name"));
// 2. 通过InputStream读取文件
InputStream in3 = new FileInputStream(new File(filePath));
ResourceBundle resourceBundle2 = new PropertyResourceBundle(in3);
System.out.println("333333333333----->:"+resourceBundle2.getString("name")); 输出:
333333333333----->:xing
333333333333----->:xing

四、基于PropertiesConfiguration读取配置文件 需要使用第三方的包

这是我推荐使用的方法,毕竟有大腿在,干嘛不去抱大腿,嘿嘿。我使用的包是commons-configuration2.x 。记住这是版本2 ,不是版本1, 2和1有很大的差别的。

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-configuration2 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-configuration2</artifactId>
<version>2.2</version>
</dependency> try {
// 直接通过路径读取文件
Configurations configurations = new Configurations();
FileBasedConfigurationBuilder.setDefaultEncoding(PropertiesConfiguration.class, "UTF-8");
PropertiesConfiguration propertiesConfiguration = configurations.properties(filePath);
System.out.println("444444444444----->:"+propertiesConfiguration.getString("name"));
//通过reader 读取文件 找了找好像没有通过InputStream读取文件的方式
PropertiesConfiguration propertiesConfiguration1 = new PropertiesConfiguration();
propertiesConfiguration1.read(new BufferedReader(new FileReader(new File(filePath))));
System.out.println("555555555555----->:"+propertiesConfiguration1.getString("name"));
} catch (org.apache.commons.configuration2.ex.ConfigurationException e) {
e.printStackTrace();
} 输出:
444444444444----->:xing
555555555555----->:xing

整个类:

package com.xing.test;

import org.apache.commons.configuration2.PropertiesConfiguration;
import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder;
import org.apache.commons.configuration2.builder.fluent.Configurations;
import java.io.*;
import java.util.Properties;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle; public class ReadProperties {
public static void main(String[] args) throws IOException {
String filePath = ReadProperties.class.getClassLoader().getResource("conf/demo.properties").getPath(); /** 方法一
* 基于ClassLoader读取配置文件
* 有局限性 只能在类路径下比较方便
*/
Properties properties = new Properties();
// 注意这里的路径是根据target/classes 的路径写的
InputStream in = ReadProperties.class.getClassLoader().getResourceAsStream("conf/demo.properties");
properties.load(in);
System.out.println("1111111111111---->:"+properties.getProperty("name"));
/** 方法二
* 基于InputStream读取配置文件
*
*/
Properties properties2 = new Properties();
// 两种获取文件流的方式都可以,对于小文件第一种更快一点
// 通过BufferedReader获取文件流
try (BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath))) {
properties2.load(bufferedReader);
System.out.println("22222222222---->:"+properties2.getProperty("name"));
}catch (Exception e){
e.printStackTrace();
}
// 通过FileInputStreamm获取文件流
InputStream in2 = new FileInputStream(new File(filePath));
properties2.load(in2);
System.out.println("22222222222---->:"+properties2.getProperty("name"));
/** 方法三
* 基于ResourceBundle读取配置文件
*
*/
// 1. 通过ResourceBundle.getBundle() 静态方法来获取文件 这种方式不需要添加后缀名
ResourceBundle resourceBundle = ResourceBundle.getBundle("conf/demo");
System.out.println("333333333333----->:"+resourceBundle.getString("name"));
// 2. 通过InputStream读取文件
InputStream in3 = new FileInputStream(new File(filePath));
ResourceBundle resourceBundle2 = new PropertyResourceBundle(in3);
System.out.println("333333333333----->:"+resourceBundle2.getString("name"));
/** 方法四
* 基于PropertiesConfiguration读取配置文件 需要使用第三方的包
*
*/ try {
Configurations configurations = new Configurations();
FileBasedConfigurationBuilder.setDefaultEncoding(PropertiesConfiguration.class, "UTF-8");
PropertiesConfiguration propertiesConfiguration = configurations.properties(filePath);
System.out.println("444444444444----->:"+propertiesConfiguration.getString("name"));
//InputStream in4 = new FileInputStream(new File(filePath));
PropertiesConfiguration propertiesConfiguration1 = new PropertiesConfiguration();
propertiesConfiguration1.read(new BufferedReader(new FileReader(new File(filePath))));
System.out.println("555555555555----->:"+propertiesConfiguration1.getString("name"));
} catch (org.apache.commons.configuration2.ex.ConfigurationException e) {
e.printStackTrace();
}
}
}

后记

通常在读取配置文件的时候都是写个工具类,在程序运行的时候就加载配置文件了。这里简单写了一个,凑合着看吧。

package com.xing.test;
import org.apache.commons.configuration2.PropertiesConfiguration;
import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder;
import org.apache.commons.configuration2.builder.fluent.Configurations;
import org.apache.commons.configuration2.ex.ConfigurationException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class PropertiesUtils { private static final Log log = LogFactory.getLog(PropertiesUtils.class); private static Configurations configurations = null;
private static PropertiesConfiguration propertiesConfiguration = null;
private static void initProperties(){
configurations = new Configurations();
FileBasedConfigurationBuilder.setDefaultEncoding(PropertiesConfiguration.class, "UTF-8");
try {
propertiesConfiguration = configurations.properties(PropertiesUtils.class.getClassLoader().getResource("conf/demo.properties"));
} catch (ConfigurationException e) {
log.error("配置文件初始化失败",e);
}
}
static {
initProperties();
} /**
* 获取String类型的value
* @param key
* @return
*/
public static String getValueString(String key){
if (propertiesConfiguration == null){
initProperties();
}
return propertiesConfiguration.getString(key);
} /**
* 获取int类型的value
* @param key
* @return
*/
public static int getValueInt(String key){
if (propertiesConfiguration == null){
initProperties();
}
return propertiesConfiguration.getInt(key, 0);
} }

其实这个包还可以自动重载的功能,修改了配置文件不需要重启服务器即可加载重载配置文件。

点击关注,第一时间了解华为云新鲜技术~

你会几种读取/加载 properties配置文件方法的更多相关文章

  1. 加载Properties配置文件

    /** * 加载Properties配置文件 * * @author ZhangHaiNing * @param file 要读取的文件 * @return */ public static Prop ...

  2. Java加载Properties配置文件工具类

    Java加载Properties配置文件工具类 import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; ...

  3. 使用Spring加载properties配置文件.md

    背景 类似于datasource.properties之类的配置文件,最初通过Java的Properties类进行处理.这种方式有许多弊端,如每次都需要读取配置文件:若将Properties作为成员变 ...

  4. Spring加载Properties配置文件的三种方式

    一.通过 context:property-placeholder 标签实现配置文件加载 1) 用法: 1.在spring.xml配置文件中添加标签 <context:property-plac ...

  5. Java之JDBC 通过加载properties配置文件连接数据库

    通常情况下,我们通过JDBC连接数据库的时候,不会将数据库相关配置写死,因为到时候数据库一有改动,就要重新打包部署到服务器或者替换相关的.class文件,这样非常不灵活.因此,咱们一般会通过读取配置文 ...

  6. jquery和js的几种页面加载函数的方法以及执行顺序

    参考博客:http://www.cnblogs.com/itslives-com/p/4646790.html    https://www.cnblogs.com/james641/p/783837 ...

  7. spring加载properties配置文件

    public static void main(String[] args){    String path="E:/workspace/bocMarketData/src/config/P ...

  8. Spring加载properties文件的两种方式

    在项目中如果有些参数经常需要修改,或者后期可能需要修改,那我们最好把这些参数放到properties文件中,源代码中读取properties里面的配置,这样后期只需要改动properties文件即可, ...

  9. spring入门(二)【加载properties文件】

    在开发过程当中需要用到配置信息,这些信息不能进行硬编码,这时配置文件是一个比较好的方式,java提供了properties格式的文件,以键值对的方式保存信息,在读取的时候通过键获得键对应的值,spri ...

  10. JAVA加载Properties配置资源文件

    JAVA加载Properties配置资源文件 制作人:全心全意 配置文件(资源文件):以properties作为拓展名的文件 Java代码是如何加载properties文件的? 必须使用Propert ...

随机推荐

  1. MVC(JSP+JavaBean+Servlet)入门实例:用户登陆验证

    一.JSP.JavaBean.Servlet的区别 1.JSP:JSP通过在标准的HTML页面中嵌入Java代码,其静态的部分无效Java程序控制,只有那些需要从数据库读取或需要动态生成的页面内容,才 ...

  2. ORACLE SQL语句逻辑读高优化案例

    川川找我优化SQL,逻辑读达到398,000,安排一下. SQL和执行计划: SELECT t1.*, t3.bed_number, t3.patient_name, t4.name FROM odw ...

  3. 【pwn】ciscn_2019_s_3 -- rop,gadget利用,泄露栈地址

    这道题挺好的,可以帮助我更好的理解gadget的利用以及rop技术 首先,查一下程序保护情况 拖进ida分析 这里sys_read和sys_write是系统调用函数,看汇编可以分析出来 我们首先要了解 ...

  4. .NET周刊【11月第3期 2023-11-19】

    国内文章 .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试 https://www.cnblogs.com/FreeSql/p/17836 ...

  5. Pattern类和Matcher类的使用

    1.先看好数据源 先将一个String对象确定为程序要对其进行操作的数据源. String b="hello,good morning"; 2.建立Pattern类的对象 Stri ...

  6. [CF1824D] LuoTianyi and the Function

    题目描述 LuoTianyi gives you an array $ a $ of $ n $ integers and the index begins from $ 1 $ . Define $ ...

  7. [转载] Winform WebBrowser 使用 Edge 内核

    原文地址 C# 设置 WebBrowser 使用 Edge 内核_c# webbrowser 内核 - CSDN 博客 原文内容 1. 问题描述 用 C# 写了一个小工具, 需要显示网页上的内容, 但 ...

  8. Spring Cache + Caffeine的整合与使用

    前言 对于一些项目里需要对数据库里的某些数据一直重复请求的,且这些数据基本是固定的,在这种情况下,可以借助简单使用本地缓存来缓存这些数据.这些介绍一下Spring Cache和Caffeine的使用. ...

  9. bash shell笔记整理——cat命令

    cat命令的作用 简单来说cat命令用于查看文件内容,但是真正来说cat将给定的文件或者标准输入输出到标准输出中. 这个命令时会经常使用到的,不管是在shell脚本的编写还是linux运维测试中,ca ...

  10. Go 泛型之类型参数

    Go 泛型之类型参数 一.Go 的泛型与其他主流编程语言的泛型差异 Go泛型和其他支持泛型的主流编程语言之间的泛型设计与实现存在差异一样,Go 的泛型与其他主流编程语言的泛型也是不同的.我们先看一下 ...