java读取properties配置文件的方法
作者:一羽清宁 发布时间:2022-02-13 17:15:44
本文实例讲述了java读取properties配置文件的方法。分享给大家供大家参考。具体分析如下:
这两天做java项目,用到属性文件,到网上查资料,好半天也没有找到一个满意的方法能让我读取到.properties文件中属性值,很是郁闷,网上讲的获取属性值大概有以下方法,以下三种方法逐渐优化,以达到最好的效果以下都以date.properties文件为例,该文件放在src目录下,文件内容为:
startdate=2011-02-07
totalweek=25
方法一:
public class Stweek {
static private String startdate = null;
static private String totalweek = null;
synchronized static public void loads(){
if(startdate == null || totalweek == null)
{
FileInputStream is = null;
Properties dbProps = new Properties();
try {
is = new FileInputStream(filepath);
dbProps.load(is);
startdate = dbProps.getProperty("startdate");
totalweek = dbProps.getProperty("totalweek");
}
catch (Exception e) {
System.err.println("不能读取属性文件. " +
"请确保db.properties在CLASSPATH指定的路径中");
}
}
}
public static String getStartdate() {
if(tartdate==null)
loads();
return startdate;
}
public static String getTotalweek() {
if(startdate==null)
loads();
return totalweek;
}
}
以上方法虽然也能获得配置文件内容,可是其最大的问题就是文件路径的定位(就是代码中的filepath取值问题),当采用绝对定位的时候,如果将工程移到另外一个盘符下运行,就需要修改源代码,否则就会报错,可是如果使用相对路径,当Stweek 类移到另外一个包中时,还是要修改源代码,否则会报错,所以说这个方法局限太大,不好,以下方法二能解决这个问题,可是其还是有些问题
方法二:
public class Stweek {
InputStream is = null;
Properties dbProps = null;
public Stweek() {
// TODO Auto-generated constructor stub
is = getClass().getResourceAsStream("/date.properties");
dbProps = new Properties();
try {
dbProps.load(is);
}
catch (Exception e) {
System.err.println("不能读取属性文件. " +
"请确保db.properties在CLASSPATH指定的路径中");
}
}
public String getStartdate()
{
String sd = null;
sd = dbProps.getProperty("startdate");
return sd;
}
public String getTotalweek()
{
String totalweek=null;
totalweek = dbProps.getProperty("totalweek");
return totalweek;
}
}
这个方法的好处就是不用指出配置文件的绝对路径,而且不管是将Stweek 类放到另外的包中,还是将整个工程移到到另外的盘符下,代码依然可以正常运行,不会有找不到文件的问题,可是这个方法仍然有一个重大的缺陷,因为我们往往希望配置文件能够缓存在内存中,这样不用每次读取时都要访问硬盘(访问外存太浪费时间),为此我们希望使用静态变量、静态方法来缓存和获得变量,同时能够实现这些值的动态加载(load),那么问题来了,因为getClass().getResourceAsStream("/date.properties"); 这一句只能出现在构造函数中(同鞋可以自己测试一下),动态load中并不能使用这个方法,怎么办呢,且看第三个方法
方法三:
import java.io.InputStream;
import java.util.Properties;
public class Stweek {
static private String startdate = null;
static private String totalweek = null;
static{
loads();
}
synchronized static public void loads(){
if(startdate == null || totalweek == null)
{
InputStream is = Stweek.class.getResourceAsStream("/date.properties");
Properties dbProps = new Properties();
try {
dbProps.load(is);
startdate = dbProps.getProperty("startdate");
totalweek = dbProps.getProperty("totalweek");
}
catch (Exception e) {
System.err.println("不能读取属性文件. " +
"请确保db.properties在CLASSPATH指定的路径中");
}
}
}
public static String getStartdate() {
if(startdate==null)
loads();
return startdate;
}
public static String getTotalweek() {
if(startdate==null)
loads();
return totalweek;
}
}
这个方法不仅能够缓存配置文件内容,还能够做到自动加载配置文件的内容到内存,使用者完全不用考虑手动加载的过程,只需要在需要用到的地方直接调用Stweek.getStartdate()即可(因为是静态方法,事先连对像也不用创建的),这样如果内存中有缓存,函数就会直接读取内存中的数据,节省时间,如果没有缓存也不用担心,系统会自动为你加载,使用者完全不用知道其是如何实现的,只需要知道我能直接调用函数获得想要的值就行了,呵呵,简单吧
备注:(与上文无关,自己的测试)
希望本文所述对大家的java程序设计有所帮助。


猜你喜欢
- 一、效果 点击开始: 点击停止: 二、在MainActivity中import android.graphics.P
- C#反射技术主要基于System.Type类和System.Reflection.Assemble类,通过Type类可以访问关于任何数据类型
- 1. MyBatis 中 #{}和 ${}的区别是什么?#{}是预编译处理,${}是字符替换。 在使用 #{}时,MyBatis 会将 SQ
- 前言泛型在java中有很重要的地位,无论是开源框架还是JDK源码都能看到它。毫不夸张的说,泛型是通用设计上必不可少的元素,所以真正理解与正确
- 一个Maprduce程序主要包括三部分:Mapper类、Reducer类、执行类。Maven项目下所需依赖<dependencies&
- /// <summary> /// 字符串转16进制字节数组 /// </summary> /// <para
- 本文实例讲述了java自动生成ID号的方法。分享给大家供大家参考。具体实现方法如下:import java.util.UUID;public
- RestTemplate 请求接收自定义400+ 或500+错误场景当服务端自定义400错误返回体时,使用restTemplate 请求接收
- 1 pom.xml文件注:热部署功能spring-boot-1.3开始有的<!--添加依赖--><dependency&g
- 本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下using System;using Microsoft
- 一、绘制背景绘制背景的方法有两种:自己利用canvas进行绘制利用view的自带方法进行绘制1.1 canvas绘制背景自己绘制的背景的方法
- C# 字符串进制转换/// <summary> /// 进制转换 &nbs
- 先来说一说我们为什么要用这个东西啊!比如,我们现在有这样了个问题要解决:这样,我们就要用到中间消息间了然后我们就说一下什么是中间消息间吧。采
- servlet、filter、listener、interceptor之间的区别和联系一、概念1.servlet:servlet是一种运行服
- 一、音乐播放器的实现原理 Javase的多媒体功能很弱,所以有一个专门处理多媒体的插件叫JMF,JMF提供的模型可大致分为七类*
- 概述从今天开始, 小白我将带大家开启 Jave 数据结构 & 算法的新篇章.链表链表 (Linked List) 是一种递归的动态数
- 在springboot的开发中,有时候我们会有不同的配置,例如日志打印,数据库连接等,开发,测试,生产每个环境可能配置都不一致,还好,spr
- Java 利用poi把数据库中数据导入Excel效果:使用时先把poi包导入工程的path,注意只需要导入poi包即可,下载后有三个jar包
- 最近完成的差不多的项目突然需要加退款的流程需求了,所以来小小的实现以下。其实对比其他的支付和退款来说,支付宝算是特别专业,也是特别简单的一个
- 本文实例讲述了c#与js随机数生成方法。分享给大家供大家参考。具体如下:1. C#产生随机数方法:Random rd = new Rando