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

原创 2004年06月23日 12:10:00

我们常常会在程序中用到这样的配置文件:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

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

hdu 2045 不容易系列之(3)—— LELE的RPG难题(java)

问题: 开始用的long,装不下,就立马想用大数来做。 在long装不下时不要立马就用大数,可以试试用double,double可以满足大多数要求 不容易系列之(3)—— LELE的...
  • amx50b
  • amx50b
  • 2015年05月30日 11:37
  • 495

java并发-ReentrantLock源码分析

1关于可重入锁        ReentrantLock是基于AQS实现的可重入的同步工具类,它提供了两种同步器的实现即公平锁FairSync和非公平锁NonfairSync。它提供了一种无条件的、可...
  • wojiushiwo945you
  • wojiushiwo945you
  • 2014年12月26日 14:28
  • 1175

HDU 2045 不容易系列之(3)—— LELE的RPG难题

不容易系列之(3)—— LELE的RPG难题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O...
  • a237653639
  • a237653639
  • 2015年06月08日 12:46
  • 827

2045不容易系列之(3)—— LELE的RPG难题(递推)

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submissio...
  • qq_34594236
  • qq_34594236
  • 2016年06月29日 09:12
  • 217

IC设计基础系列之CDC篇3:揭秘《跨时钟域处理》三大方法

来自:http://dengkanwen.com/238.html   跨时钟域处理是FPGA设计中经常遇到的问题,而如何处理好跨时钟域间的数据,可以说是每个FPGA初学者的必修课。如果是还在校的本科...
  • Times_poem
  • Times_poem
  • 2017年06月11日 18:20
  • 503

读logback源码系列文章(八)——记录日志的实际工作类Encoder

本系列的博客从logback怎么对接slf4j开始,逐步介绍了LoggerContext、Logger、ContextInitializer、Appender、Action等核心组件。跟读logbac...
  • kyfxbl
  • kyfxbl
  • 2013年09月24日 10:57
  • 1235

Nginx源码分析 - 主流程篇 - 解析配置文件

Nginx源码中比较重要的一块就是配置文件的解析。一般是解析/usr/local/nginx/conf/nginx.conf文件中的配置信息。前一篇文章,我们介绍了Nginx的模块化。Nginx的功能...
  • initphp
  • initphp
  • 2016年07月14日 18:47
  • 3148

HBase源码系列(一)客户端入口HTable

HTable Put操作 获取RegionLocations Get Delete ScanHTableHTable作为客户端操作HBase数据的入口,是我们最常见的一个类。当向HBase 写入数据时...
  • OiteBody
  • OiteBody
  • 2017年11月07日 17:06
  • 203

数据包接收系列 — IP协议处理流程(二)

本文主要内容:在接收数据包时,IP协议的处理流程。 内核版本:2.6.37 Author:zhangskd @ csdn blog    我们接着来看数据包如何发往本地的四层协...
  • wh8_2011
  • wh8_2011
  • 2015年10月20日 09:26
  • 670

杭电 HDU ACM 2045 不容易系列之(3)—— LELE的RPG难题

不容易系列之(3)—— LELE的RPG难题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/...
  • lsgqjh
  • lsgqjh
  • 2015年04月10日 01:06
  • 1399
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:enoeht的Java源码系列(3)--处理配置文件
举报原因:
原因补充:

(最多只允许输入30个字)