分享
 
 
 

enoeht的Java源码系列(3)--处理配置文件

王朝java/jsp·作者佚名  2006-01-30
窄屏简体版  字體: |||超大  

我们常常会在程序中用到这样的配置文件:

Listener = org.kyle.net.svr.sample.SampleListenerImpl

ServerAddress = 127.0.0.1

ListeningPort = 80

ListenerTimeout = 120

StatelessService = true

LogLevel = ALL

LogPath = server.log

在这里提供了一个处理这种配置文件的类的源代码。

package org.kyle.util;

import java.io.*;

import java.util.*;

//加载配置文件,并提供从配置文件中读取各种类型的值的方法

public class Profile

{

protected Properties applicationProps;

protected String m_configurationFilename = null;

private boolean m_debug = false;

public Profile( boolean debug)

{

this();

m_debug = debug;

}

public Profile()

{

this(System.getProperty("MainConfigFile","Server.cfg"));

}

public Profile(String configurationFilename)

{

this.m_configurationFilename = configurationFilename;

loadCfg(configurationFilename);

}

public void loadConfig(String configurationFilename)

{

if( configurationFilename == null )

{

System.exit(-1);

}

try {

applicationProps = new Properties();

FileInputStream in = new FileInputStream(configurationFilename);

applicationProps.load(in);

in.close();

}

catch( IOException ie)

{

System.exit(-1);

}

}

public void loadConfig()

{

loadConfig( m_configurationFilename );

}

public void saveConfig()

{

try

{

FileOutputStream out = new FileOutputStream(m_configurationFilename);

BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, "8859_1"));

synchronized (applicationProps)

{

Iterator iterator = new TreeSet(applicationProps.keySet()).iterator();

while(iterator.hasNext())

{

String key = (String)iterator.next();

writer.write(key + "=" + applicationProps.getProperty(key));

writer.newLine();

}

}

writer.close();

out.close();

}catch(IOException ie)

{

System.out.println(ie.toString());

}

}

public void showConfig()

{

applicationProps.list(System.out);

}

public Properties getProperty()

{

return applicationProps;

}

String getString(String Section, String key, String Default)

{

return getString( key, Default);

}

public String getString(String key, String Default)

{

String rVal = applicationProps.getProperty(key, Default);

return rVal == null ? rVal : rVal.trim();

}

public String getString(String key)

{

String rVal = applicationProps.getProperty(key);

return rVal == null ? rVal : rVal.trim();

}

public boolean getBoolean(String key, boolean Default)

{

String rVal = getString(key);

// if (rVal == null) return Default;

if ("true".equalsIgnoreCase(rVal)) return true;

if ("false".equalsIgnoreCase(rVal)) return false;

return Default;

}

public int getInt(String key, int Default)

{

try{

return getInt(key);

}catch(Exception e){

applicationProps.setProperty(key, String.valueOf(Default));

return Default;

}

}

protected int getInt(String key) throws NumberFormatException

{

String rVal = getString(key);

return Integer.parseInt(rVal);

}

public String getConfigurationFilename()

{

return m_configurationFilename;

}

private void loadCfg(String configurationFilename)

{

if( configurationFilename == null )

{

System.out.println("Assigned a null configuration file. Default setting used.");

}

try

{

applicationProps = new Properties();

FileInputStream in = new FileInputStream(configurationFilename);

applicationProps.load(in);

in.close();

}

catch( IOException ioe)

{

System.out.println("Loading configuration from file " + configurationFilename + " failed.");

System.out.println("Default setting will be used.");

}

}

}

package org.kyle.util;

import java.net.*;

//调用父类加载配置文件和读取数据,按照配置文件的中的key值读取其value。

public class GenProfile extends Profile

{

public GenProfile()

{

super();

buildCachedCrypt();

}

public GenProfile( String cfgFileName )

{

super( cfgFileName );

buildCachedCrypt();

}

public String getListenerImpl()

{

return getString("Listener", " org.kyle.net.svr.sample.SampleListenerImpl");

}

public InetAddress getServerAddress()

{

try

{

String svrAddr = getString("ServerAddress",null);

if ( svrAddr == null ) return null;

return InetAddress.getByName( svrAddr );

}

catch( UnknownHostException uhe)

{

Debug.info(uhe);

}

return null;

}

public int getListenAt()

{

return getInt("ListeningPort", 80);

}

public int getTimeout()

{

return getInt("ListenerTimeout", 120);

}

public boolean statelessService()

{

return getBoolean("StatelessService", true );

}

public String getLogLevel()

{

return getString("LogLevel","CONFIG");

}

public String getLogPath()

{

return getString("LogPath","server.log");

}

}

使用方法:

String cfgFile ="server.cfg";

GenProfile m_env = new GenProfile( cfgFile );

这样在程序中就可以使用例如m_env. getServerAddress()等方法取得配置文件的相应内容了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有