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()等方法取得配置文件的相应内容了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航