java 如何读取properties文件
作者:Marydon 发布时间:2023-08-28 05:23:01
标签:java,读取,properties
1.情景展示
将要访问的接口地址等常用的配置添加到properties文件中,比直接写到java类中的好处在于:
当我们需要修改相应配置时,直接修改properties文件,重启tomcat即可,避免了重新编译引用该配置的java文件,同时,也便于项目的维护。
方式一
通过spring的工具类PropertiesLoaderUtils来实现对properties文件的解析
所需jar包:spring的核心jar包,spring-core-版本号.jar
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.springframework.core.io.support.PropertiesLoaderUtils;
/**
* 借助spring读取Properties文件
* @explain Spring 提供的 PropertiesLoaderUtils
* 允许您直接通过基于类路径的文件地址加载属性资源 最大的好处就是:实时加载配置文件,修改后立即生效,不必重启
* @author Marydon
* @creationTime 2018年5月23日上午9:58:59
* @version 1.0
* @since
* @email marydon20170307@163.com
*/
public class PropertiesUtils {
/**
* 读取properties文件
* @param fileName properties文件名及所在路径
* @explain 参数说明
* 1.传递的参数不是properties类型文件,不会报错,返回的是空Map;
* 2.传递的参数是根本不存在的properties文件,也不会报错,返回的是空Map;
* 3.传递的参数可以带路径,可以正常解析到
* @return
*/
public static Map<String, String> readProperties(String fileName) {
Map<String, String> resultMap = new HashMap<String, String>();
try {
Properties props = PropertiesLoaderUtils.loadAllProperties(fileName);
for (Object key : props.keySet()) {
resultMap.put(key.toString(), props.get(key).toString());
}
} catch (IOException e) {
e.printStackTrace();
}
return resultMap;
}
/**
* @param args
*/
public static void main(String[] args) {
// Map map = readProperties("base/web/imageInfo/fileRootDirectories.properties");
Map map = readProperties("fileRootDirectories.properties");
for (Object key : map.keySet()) {
System.out.println(key.toString() + "=" + map.get(key).toString());
}
// 打印结果
// fileRootPath=uploadFiles
}
}
这种方式的缺点在于:
每次调用都要重新解析对应的properties文件,所以,我们可以在项目启动的时候,就把该文件加载到内存中(一次加载解析,永久使用)。
方式二
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* properties文件工具类
* @description
* 在该类被加载的时候,它就会自动读取指定位置的配置文件内容并保存到静态属性中,高效且方便,一次加载,可多次使用
* @author: Marydon
* @date: 2020年07月13日 0013 16:04
*/
public class PropertyUtils_old {
private static Logger logger = LoggerFactory.getLogger(PropertyUtils_old.class);
// 待解析的properties文件名称
private static final String FILE_NAME = "bill.properties";
// 用于接收解析过properties文件
private static Properties props;
// 静态代码块:在该类被加载到内容中时,该代码块会执行
static {
// 静态代码块执行时将要执行的方法
loadPropertiesFile();
}
synchronized static private void loadPropertiesFile() {
logger.debug("开始加载properties文件内容.......");
props = new Properties();
InputStream in = null;
try {
// 方式一:通过类加载器进行获取properties文件流(不用添加路径)
in = PropertyUtils_old.class.getClassLoader().getResourceAsStream(FILE_NAME);
// 方式二:通过类进行获取properties文件流(需要加/)
// in = PropertyUtils.class.getResourceAsStream("/bill.properties");
props.load(in);
} catch (NullPointerException e) {
logger.error("bill.properties文件未找到!");
} catch (IOException e) {
logger.error("出现IOException!");
} finally {
try {
if (null != in) {
in.close();
}
} catch (IOException e) {
logger.error("bill.properties文件流关闭出现异常");
}
}
logger.info("加载properties文件内容完成...........");
logger.info("properties文件内容:" + props);
}
/*
* 获取properties文件中指定key的value
* @date: 2020年07月13日 0013 16:17
* @param: key
* @return: java.lang.String
*/
public static String getProperty(String key) {
if (null == props) {
loadPropertiesFile();
}
return props.getProperty(key);
}
/*
* 获取properties文件中指定key的value
* @date: 2020年07月13日 0013 16:17
* @param: key
* @param: defaultValue
* @return: java.lang.String
*/
public static String getProperty(String key, String defaultValue) {
if (null == props) {
loadPropertiesFile();
}
return props.getProperty(key, defaultValue);
}
}
测试
public static void main(String[] args) {
System.out.println(getProperty("bill.czInterfaceAddress"));
}
方式一也可以按照方式二的形式,来达到一次加载,永久使用的效果。
来源:https://www.cnblogs.com/Marydon20170307/p/9148783.html
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 小程序获取手机号,后端JAVA解密流程代码微信官方文档获取手机号流程地址,先看下最好方便理解下面步骤实现思路,步骤如下1.前端需先调用官方w
- Jetty和tomcat的比较Tomcat和Jetty都是一种Servlet引擎,他们都支持标准的servlet规范和JavaEE的规范。架
- 如果你是一名Web开发人员,那么用膝盖想也知道你的职业生涯大部分将使用Java而度过。这是一款商业级的编程语言,我们没有办法不接触它。对于J
- 门面模式又叫外观模式(Facade Pattern),主要用于隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。我们知道电视剧
- 1. 人机对战要增添一个人机对战的模块, 最大的难点就是如何让人机知道下在什么位置是最好的, 不仅要具备进攻的能力, 还需要具备防守的能力.
- 一. Window 分类应用 Window(ApplicationWindow: 对应一个 Acitivity)
- 相信大家都经常使用String 的split方法,但是大家有没有遇到下面的这种情况:大家想想下面的代码执行结果是什么public stati
- 在很多场景下,maven不能直接访问到外网时,使用代理是其中常见的一种方式。这篇文章整理一下常见的maven中设置代理的方法。代理服务器代理
- 我们开发WinFrom程序,很多时候都希望程序只有一个实例在运行,避免运行多个同样的程序,一是没有意义,二是容易出错。为了更便于使用,笔者整
- main方法调用spring的service将业务层类配置到Spring中:<bean id="customerServic
- 这几天面试中有遇到关于main数组中的args数组传值的问题,一般是从命令提示符中传值,也可以直接在java代码中赋值。而且这个数组的长度是
- 概述透视表是依据已有数据源来创建的交互式表格,我们可在excel中创建透视表,也可编辑已有透视表。所需工具:Free Spire.XLS f
- 本文实例讲述了java实现单词搜索迷宫游戏。分享给大家供大家参考。具体分析如下:我们在杂志上,经常能够看到找单词的小游戏,在一个二维表格中,
- 下面代码看下java判断http地址是否连通private boolean isOk(String url) {
- 用Linq从一个集合选取几列得到一个新的集合-可改列名
- 前言今天给大家总结介绍一下Java类中this关键字和static关键字的用法。this关键字用法:this.属性可以调用类中的成员变量th
- 本文实例为大家分享了java转树形结构工具类的具体代码,供大家参考,具体内容如下import com.alibaba.fastjson.JS
- 一、概述Socket类是Java执行客户端TCP操作的基础类,这个类本身使用代码通过主机操作系统的本地TCP栈进行通信。Socket类的方法
- 配置文件<!-- 文件上传 --> <bean id="multipartResolver" clas
- 本文实例为大家分享了Java实现坦克大战小游戏的具体代码,供大家参考,具体内容如下创作背景:n年前的学期末课题设计,从b站上学的,一个代码一