java加载属性配置properties文件的方法

什么是properties文件

  • 属性配置文件,后缀名为 .properties
  • 文件中严格按照key=value进行数据参数的填写
  • 中文参数值需要转为Unicode编码
  • 不区分基本数据类型
  • 一个编辑好的aaa.properties文件如下图所示
username=root
flag=true
xm =\u4f60\u597d
age=18

为什么要使用properties文件

设想这么一种场景,当你项目发布上线后,比如连接mysql数据库的端口号需要调整,难道需要重写改代码,打包,发布么?对于一些重要的参数,需要人为经常改变的参数使用一个properties文件来读取,就不用修改代码了,修改完参数,重启web服务器就能实现预期的需求,后面会介绍动态加载properties文件,甚至连重启都不需要了。

使用java加载properties文件的两种方式

使用类的加载器获得输入流加载文件

 @Test
 /**
 * 使用类的加载器获得文件输入流
 * @author CC
 * @date 2020年3月24日
 */
 public void demo1() throws IOException{
 Properties prop =new Properties();
 InputStream inputstream= TestProp.class.getClassLoader().getResourceAsStream("test/aaa.properties");
 prop.load(inputstream);
 String username=prop.getProperty("username");
 boolean flag=Boolean.valueOf(prop.getProperty("flag"));
 String xm=prop.getProperty("xm");
 int age =Integer.valueOf(prop.getProperty("age"));
 System.out.println( username + " " +flag+" "+xm+" "+age);
 }

需要注意的点:

  • Properties 类是java.util包下的类,同时是Map的实现类,可以直接使用,有机会会介绍!
  • 获取参数prop.getProperty(“key”),这种获得参数的value是字符串的形式,需要按需转换
  • 中文不需要特殊处理,Unicode编码会转化成中文

使用junit的单元测试效果如下:

root true 你好 123

getResourceAsStream()介绍

jdk中对其描述为:返回用于读取指定资源的输入流。

public InputStream getResourceAsStream(String name)

这个指定的资源路径时怎么确定的呢?
如果是java工程则是相对于src的路径
比如:是位于src的根目录下有一个aaa.properties文件,增正确的访问方式如下:

getResourceAsStream("aaa.properties");

比如:是位于src的根目录下有一个test文件夹,里面有一个aaa.properties文件,增正确的访问方式如下:

getResourceAsStream("test/aaa.properties");

使用文件输入流加载文件

 @Test
 /**
 * 使用标准的文件输入流读取文件
 * @author CC
 * @date 2020年3月24日
 */
 public void demo2() throws IOException{
 Properties prop =new Properties();
 InputStream inputstream= new FileInputStream("src/test/aaa.properties");
 prop.load(inputstream);
 String username=prop.getProperty("username");
 boolean flag=Boolean.valueOf(prop.getProperty("flag"));
 String xm=prop.getProperty("xm");
 int age =Integer.valueOf(prop.getProperty("age"));
 System.out.println( username + " " +flag+" "+xm+" "+age);
 }

使用文件输入流的缺点是什么?

文件的相对路径不好确定

一:如果是一个java工程,可以这么访问:

 new FileInputStream("src/test/aaa.properties");

二:如果是一个web工程,我们知道在Tomcat的webapps下的工程是没有src路径,所有的src下文件会被编译后放在WEB-INF的classes文件夹下面,显然上面这种访问方式会报FileNotFound的异常

实现动态加载properties文件,不用重启的那种

场景:已经发布的web项目,我想修改参数又不想重启怎么办呢?传统的上面使用类加载器获得输入流的方式,有以下缺点:
修改了.properties后,即使重新执行,读入的仍为修改前的参数。此问题的原因在于ClassLoader.getResourceAsStream读入后,会将.properties保存在缓存中,重新执行时会从缓存中读取,而不是再次读取.properties文件

使用FileInputStream每次从磁盘中的绝对路径获取文件属性,就能解决上述的缺点,但是需要怎样获得文件的绝对路径?

 Properties prop =new Properties();
 //InputStream inputstream= ImgCheckServlet.class.getClassLoader().getResourceAsStream("aaa.properties");
 //获取绝对路径
 String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();
 System.out.println(path);
 InputStream inputstream= new FileInputStream(path+"/aaa.properties");
 prop.load(inputstream);
 String username=prop.getProperty("username");
 boolean flag=Boolean.valueOf(prop.getProperty("flag"));
 String xm=prop.getProperty("xm");
 int age =Integer.valueOf(prop.getProperty("age"));
 System.out.println( username + " " +flag+" "+xm+" "+age);

可以在一个servlet中看看web工程下的调用效果:比如我们改动age=123,在控制台可以看到效果如下,实时生效

root true 你好 123

到此这篇关于java加载属性配置properties文件的方法的文章就介绍到这了,更多相关java properties配置内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java 读写Properties配置文件详解

    Java 读写Properties配置文件 1.Properties类与Properties配置文件 Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形式来保存属性集.不过Properties有特殊的地方,就是它的键和值都是字符串类型. 2.Properties中的主要方法 (1)load(InputStream inStream) 这个方法可以从.properties属性文件对应的文件输入流中,加载属性列表到Properties类对象.如下面的代码:

  • Java 操作Properties配置文件详解

    1 简介: JDK提供的java.util.Properties类继承自Hashtable类并且实现了Map接口,是使用一种键值对的形式来保存属性集,其中键和值都是字符串类型. java.util.Properties类提供了getProperty()和setProperty()方法来操作属性文件,同时使用load()方法和store()方法加载和保存Properties配置文件. java.util.ResourceBundle类也提供了读取Properties配置文件的方法,Resource

  • Java读取properties配置文件时,出现中文乱码的解决方法

    如下所示: public static String getConfig(String key) { Properties pros = new Properties(); String value = ""; try { pros.load(new InputStreamReader(Object.class.getResourceAsStream("/properties.properties"), "UTF-8")); value = pr

  • Java中的几种读取properties配置文件的方式

    相信对于一名JAVA开发者开说properties文件一定再熟悉不过了,比如一下配置: config.properties会经常存放一些系统常量,版本号,路径之类的 database.properties存放数据库的连接参数 log4j.properties 日志的一些基本配置 redis.properties 缓存数据库的一些配置 当然前缀是根据用能自行定义的,一般来说文件的内容的格式是"键=值"的格式,文本注释信息可以用"#"来注释,下面来说说开发中如何读写pr

  • Java 读取、获取配置文件.properties中的数据

    java获取配置文件.properties中的数据,具体内容如下所示: 方法太多,只写一种比较简单的. 文件test1.properties内容 test1 = 123; test2=3211 Properties prop = new Properties(); prop.load(new FileInputStream("src/test1.properties")); System.out.println(prop.get("test1")); 输出 123;

  • java简单读取properties配置文件的方法示例

    本文实例讲述了java简单读取properties配置文件的方法.分享给大家供大家参考,具体如下: 读取配置文件,小结如下 import java.io.FileNotFoundException; import java.io.IOException; import java.util.Properties; public class loadConf { private Properties prop = new Properties(); private void loadconf() t

  • java读取properties配置文件的方法

    本文实例讲述了java读取properties配置文件的方法.分享给大家供大家参考.具体分析如下: 这两天做java项目,用到属性文件,到网上查资料,好半天也没有找到一个满意的方法能让我读取到.properties文件中属性值,很是郁闷,网上讲的获取属性值大概有以下方法,以下三种方法逐渐优化,以达到最好的效果以下都以date.properties文件为例,该文件放在src目录下,文件内容为: startdate=2011-02-07 totalweek=25 方法一: public class

  • Java读取.properties配置文件方法示例

    一.介绍 Properties文件在Java中主要为配置文件,文件类型为:.properties,格式为文本文件,内容格式为"键=值" 二.读取 这里我采用的是getResourceAsStream的文件读取方法 如果想要使用这个方法,则需要了解一些基本使用信息: 1.读取文件路径范围:只局限于工程的源文件中 2.文件访问形式:带"/"是绝对路径,不带"/"是相对路径 3.读取文件类型:主要为:.properties文件,.xml文件 三.使用

  • 详解Java中log4j.properties配置与加载应用

    log4j.properties总结: 一.介绍 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Syslog守护进程等:我们也可以控制每一条日志的输出格式:通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程. Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式.日志信息的优先级从高到低有ERROR.WARN. I

  • java加载属性配置properties文件的方法

    什么是properties文件 属性配置文件,后缀名为 .properties 文件中严格按照key=value进行数据参数的填写 中文参数值需要转为Unicode编码 不区分基本数据类型 一个编辑好的aaa.properties文件如下图所示 username=root flag=true xm =\u4f60\u597d age=18 为什么要使用properties文件 设想这么一种场景,当你项目发布上线后,比如连接mysql数据库的端口号需要调整,难道需要重写改代码,打包,发布么?对于一

  • Python实现加载及解析properties配置文件的方法

    本文实例讲述了Python实现加载及解析properties配置文件的方法.分享给大家供大家参考,具体如下: 这里参考前面一篇:http://www.jb51.net/article/137393.htm 我们都是在java里面遇到要解析properties文件,在python中基本没有遇到这中情况,今天用python跑深度学习的时候,发现有些参数可以放在一个global.properties全局文件中,这样使用的时候更加方便.原理都是加载文件,然后用line方法进行解析判断"=",自

  • jQuery加载及解析XML文件的方法实例分析

    本文实例讲述了jQuery加载及解析XML文件的方法.分享给大家供大家参考,具体如下: 1.简述 XML(eXtensible Markup Language)即可扩展标记语言,与HTML一样,都是属于SGML标准通用语言. 2. Content-Type 很多情况下XML文件不能正常解析都是由于Content-Type没有设置好.如果Content-Type本身就是一个XML文件则不需要设置:如果是由后台程序动态生成的,那么就需要设置Content-Type为"text/xml",否

  • JS实现加载和读取XML文件的方法详解

    本文实例讲述了JS实现加载和读取XML文件的方法.分享给大家供大家参考,具体如下: 有时在开发时用到 JS 加载和读取XML文件的情况,写下提供参考,这里主要是分两步完成: 1. JS加载XML文件 步骤一般为(1),建立 XML DOM 对象:(2),设置加载方式,异步(推荐)或同步: (3)提供XML文件URL然后调用 load 方法:大致如下: var xmlFileName="xxFile.xml"; var xmlDoc=''; if (window.ActiveXObjec

  • Yii2框架加载css和js文件的方法分析

    本文实例讲述了Yii2框架加载css和js文件的方法.分享给大家供大家参考,具体如下: 1.第一步是要把我们的css.js文件放到web目录下 2.第二步修改assets/AppAsset.php文件 <?php /** * @link http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * @license http://www.yiiframework.com/license/ */ na

  • 详解SpringMVC加载配置Properties文件的几种方式

    最近开发的项目使用了SpringMVC的框架,用下来感觉SpringMVC的代码实现的非常优雅,功能也非常强大, 网上介绍Controller参数绑定.URL映射的文章都很多了,写这篇博客主要总结一下SpringMVC加载配置Properties文件的几种方式 1.通过context:property-placeholde实现配置文件加载 1.1.在spring.xml中加入context相关引用 <?xml version="1.0" encoding="UTF-8&

  • Java加载property文件配置过程解析

    这篇文章主要介绍了java加载property文件配置过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1 properties简介: properties是一种文本文件,内容格式为: key = value #单行注释 适合作为简单配置文件使用,通常作为参数配置.国际化资源文件使用. 对于复杂的配置,就需要使用XML.YML.JSON等了 2 java加载Properties: java加载properties主要通过2个util包下的

  • java加载properties文件的六种方法总结

    java加载properties文件的六种方法总结 java加载properties文件的六中基本方式实现 java加载properties文件的方式主要分为两大类:一种是通过import java.util.Properties类中的load(InputStream in)方法加载: 另一种是通过import java.util.ResourceBundle类的getBundle(String baseName)方法加载. 注意:一定要区分路径格式 实现代码如下: package com.ut

  • Java加载properties文件实现方式详解

    java加载properties文件的方式主要分为两大类:一种是通过import java.util.Properties类中的load(InputStream in)方法加载: 另一种是通过import java.util.ResourceBundle类的getBundle(String baseName)方法加载. 注意:一定要区分路径格式 实现代码如下: package com.util; import java.io.FileInputStream; import java.io.Fil

  • Spring加载属性文件方式(自动加载优先级问题)

    目录 Spring加载属性文件 方式1.用xml文件配置 方式2.用注解 对Spring加载顺序的理解 web.xml初始化 spring加载流程 Spring加载属性文件 方式1.用xml文件配置 正常情况下,spring整合mybatis的配置文件的dataSource部分如下  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"

随机推荐