当前位置导航:炫浪网>>网络学院>>编程开发>>JAVA教程>>Java进阶

enoeht的Java源码系列之处理配置文件


  我们常常会在程序中用到这样的配置文件:
  
  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()等方法取得配置文件的相应内容了。
相关内容
赞助商链接