java读取properties文件内容,spring读取properties配置文件
我们平时写程序的时候,经常会改变一些参数,而这个改变并不是我们所预测的。例如,我们开发了一个操作数据库的模块。我们在开发的时候,连接的是本地数据库,所以IP、数据库名、表名、数据库主机等信息都是本地的。为了使这个操作数据的模块通用,上述信息不能写入程序中。我们通常的做法是用配置文件来解决。
每种语言都有自己支持的配置文件类型。例如,Python支持。ini文件。因为其中有一个ConfigParser类来支持对。ini文件,程序员可以操作。ini文件根据这个类提供的方法自由。然而,在Java中,Java支持。属性文件。JDK内置的java.util.Properties类为我们操作提供了方便。属性文件。
我.的形式.属性文件=============================================================
#以下是服务器和数据库信息。
dbPort=localhost
databaseName=mydb
dbUserName=root
dbPassword=root
#以下是数据库表信息
dbTable=mytable
#以下是服务器信息
ip=192.168.0.9
在上面的文件中,我们假设文件名是:test.properties文件。其中#注释信息的第一行;等号的左边“=”我们称之为key我们称它为等号“=”右边的值。(其实就是我们常说的键值对。)key应该是我们程序中的一个变量。和值由我们根据实际情况进行配置。
二。JDK属性类中的属性类存在于Java.util单元格中,继承自Hashtable。它提供了几种主要的方法:1 .GetProperty(字符串键),在此属性列表中搜索具有指定键的属性。也就是通过参数key获得key对应的值。
2.Load (InputStream instream),它从输入流中读取属性列表(键和元素对)。通过加载获取指定文件(比如上面的test.properties文件)中的所有键值对。供getProperty(字符串键)搜索。3.设置属性(stringkey,stringvalue),调用Hashtable的put方法。他通过调用基类的put方法来设置键值对。
4.Store (output stream out,string comments),它将属性表中的属性列表(键和元素对)写入输出流,格式适合使用load方法加载到属性表中。与load方法相反,此方法将键值对写入指定的文件。
5.Clear(),清除所有加载的键值对。基类中提供了此方法。
用上面的方法,我们可以操作。属性文件!
三。代码示例
包配置;
import Java . io . file inputstream;
import Java . io . filenotfoundexception;
import Java . io . file output stream;
import Java . io . io exception;
import Java . util . properties;
/***//**
*读取属性文件
*@authorQutr
*
*/
publicclassConfiguration
.{
privatePropertiespropertie
privateFileInputStreaminputFile;
privateFileOutputStreamoutputFile;
/***//**
*初始化配置类
*/
公共配置()
.{
propertie=new properties();
}
/***//**
*初始化配置类
*@paramfilePath要读取的配置文件的路径名。
*/
public configuration(string file path)
.{
propertie=new properties();
尝试.{
inputFile=new file inputstream(file path);
property . load(input file);
input file . close();
}catch(FileNotFoundExceptionex).{
读取属性文件-失败!-原因:文件路径错误或文件不存在’);
ex . printstacktrace();
}catch(IOExceptionex).{
System.out.println(加载文件-失败!);
ex . printstacktrace();
}
}//endReadConfigInfo(.)
/***//**
*重载该函数以获取key的值
*@paramkey获取其值的键。
*返回键的值
*/
publicStringgetValue(Stringkey)
.{
if(property . contains key(key)).{
string value=property ie . getproperty(key);//获取属性的值
returnvalue
}
其他
返回“”;
}//endgetValue(.)
/***//**
*重载函数,得到键的值
* @ paramfileNameproperties属性属性文件的路径文件名
*@paramkey取得其值的键
*@returnkey的值
*/
publicStringgetValue(字符串文件名,Stringkey)
.{
尝试.{
字符串值=" ";
inputFile=newFileInputStream(文件名);
财产。加载(输入文件);
输入文件。close();
如果(属性。包含密钥(密钥)).{
价值=属性。getproperty(key);
返回值
}否则
返回值
}catch(FileNotFoundExceptione).{
e。printstacktrace();
返回"";
}catch(IOExceptione).{
e。printstacktrace();
返回"";
}catch(Exceptionex).{
前任。printstacktrace();
返回"";
}
}//endgetValue(.)
/***//**
*清除性能文件中所有的键和其值
*/
publicvoidclear()
.{
财产。clear();
}//结束clear();
/***//**
*改变或添加一个键的值,当键存在于性能文件中时该键的值被价值所代替,
*当键不存在时,该键的值是价值
*@paramkey要存入的键
*@paramvalue要存入的值
*/
publicvoidsetValue(Stringkey,Stringvalue)
.{
财产。设置属性(键,值);
}//endsetValue(.)
/***//**
*将更改后的文件数据存入指定的文件中,该文件可以事先不存在。
*@paramfileName文件路径文件名称
* @描述对该文件的描述
*/
publicfoidsavefile(字符串文件名,字符串描述)
.{
尝试.{
outputFile=newFileOutputStream(文件名);
propertie.store(outputFile,description);
输出文件。close();
}catch(FileNotFoundExceptione).{
e。printstacktrace();
}catch(IOExceptionioe).{
ioe。printstacktrace();
}
}//endsaveFile(.)
publistativoidmain(String[]args)
.{
配置RC=新配置( ./config/test。属性’);//相对路径
stringip=RC。getvalue( IPP );//以下读取性能文件的值
弦鬼=RC。getvalue(“主机”);
string tab=RC。getvalue( tab );
系统。出去。println( IP= IP IP-test leng= IP-test ).length());//以下输出性能读出的值
系统。出去。println( IP的长度= IP。length());
系统。出去。println( host= host);
系统。出去。println( tab= tab);
配置cf=新配置();
Stringipp=cf.getValue( ./config/test.properties , IP );
系统。出去。println( IPP= IPP );
//cf . clear();
cf.setValue(min , 999 );
cf.setValue(max , 1000 );
cf.saveFile(./config/save。perproperties , test );
//ConfigurationsaveCf=new configuration();
//saveCf.setValue(min , 10 );
//saveCf.setValue(max , 1000 );
//saveCf.saveFile( ./config/save。perproperties’);
}//endmain()
}//endclassReadConfigInfo
四。小结通过上面的例子不难看出,在爪哇中操作配置文件是非常简单的。在一个需要用到大量配置信息的模块或系统里,我们有必要封装一个专门的类来共使用。通过最后的主要的函数调用,相信大家可以看出该类的用法。不足指出希望大家多多指点。
爪哇属性文件的操作
爪哇岛中的性能文件是一种配置文件,主要用于表达配置信息,文件类型为*.属性,格式为文本文件,文件的内容是格式是键=值的格式,在性能文件中,可以用#来作注释,属性文件在爪哇编程中用到的地方很多,操作很方便。下面是一个操作爪哇岛属性文件的例子,给出了操作方法和性能文件。从中可以看到如何读取性能文件,并应用读取出来的值,是学习操作性能文件的好例子。
一、属性文件
IcisReport.properties
-
###################################################
# 工商报表应用IcisReport的配置文件#
# 作者:雷智民#
# 日期:2006年11月21日#
###################################################
#
# 说明:业务系统主题和报表系统IcisReport是分离的
# 可分开部署到不同的服务器上,也可以部署到同一个服务
# 器上;IcisReprot作为独立的网应用程序可以使用任何
# 的小型应用程序容器或者J2EE服务器部署并单独运行,也可以
# 通过业务系统的接口调用作为业务系统的一个库来应用。
#
# IcisReport的互联网协议(互联网协议的缩写)
icis报告。服务器。IP=192。168 .3 .143
# IcisReport的端口
IcisReport.server.port=8080
# IcisReport的上下文路径
icis报告。上下文路径=/icis报告
-
二、操作性能文件的爪哇岛方法
下面是一个操作性能文件的方法
-
/**
* @返回获取IcisReport报表应用的统一资源定位器
*/
私有字符串getcisreporturl(){
字符串icisReportURL=//IcisReport报表应用的统一资源定位器
字符串icisReportServerIP=//IcisReport服务器的互联网协议(互联网协议)
字符串icisReportServerPort=//IcisReport服务器的服务端口
字符串icisReportContextPath=//IcisReport应用的上下文路径
Properties prop=new Properties();
输入流输入
尝试{
in=getClass().getResourceAsStream(/icis报告。属性’);
支柱载荷(英寸);
设置关键值=prop。keyset();
for(迭代器it=键值。迭代器();它。有next();) {
String key=(String)it。next();
如果(关键。equals( icis报告。服务器。IP ){
icisReportServerIP=(String)prop。get(键);
} else if(键。equals( icis报告。服务器。端口){
icisReportServerPort=(String)prop。get(键);
} else if(键。equals( icis报告。上下文路径){
icisReportContextPath=(String)prop。get(键);
}
}
} catch(异常e) {
log.error(IO读取出错,找不到IcisReport.properties!);
}
if (icisReportServerIP.trim().等于(""){
log.error(请检查配置文件IcisReport.properties中的IcisReport.server.ip项的值是否正确!);
}
if (icisReportServerPort.trim().等于(""){
log.error(请检查配置文件IcisReport.properties中的IcisReport.server.port项的值是否正确!);
}
if (icisReportServerPort.trim().等于(""){
log.error(请检查配置文件IcisReport.properties中的IcisReport.server.port项的值是否正确!);
}
icisReportURL= http:// icisreportserverip。trim(): icisreportserverport。trim()icisreportcontextpath。trim();
log.info(获取的icisReportURL= icisReportURL);
返回icisReportURL
}
-
总结:java的性能文件需要放到类路径下面,这样程序才能读取到,有关类路径实际上就是爪哇岛类或者库的存放路径,在爪哇岛工程中,属性放到班级文件一块。在网应用中,最简单的方法是放到网应用的we b-INF/类目录下即可,也可以放在其他文件夹下面,这时候需要在设置类路径环境变量的时候,将这个文件夹路径加到类路径变量中,这样也也可以读取到。在此,你需要对类路径有个深刻理解,类路径绝非系统中刻意设定的那个系统环境变量,WEB-INF/classes其实也是,java工程的班级文件目录也是。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。