白云天 发表于 2013-1-27 05:44:03

文本配置文件和属性文件(Properties)读取类

//注意:我的博客中的代码为自己所写,大家可以免费使用,但不要...
package com.cc.pub;

import java.util.*;

public class Config{

    private Hashtable<String,String> table;
    private String sConfig;

    protected Config(){
      table=new Hashtable<String,String>();
    }

    public Config(String s){
      this();
      sConfig=s;
    }

    public int size(){
      Enumeration e=table.keys();
      int i=0;
      while(e.hasMoreElements()){
            i++;
            e.nextElement();
      }
      return i;
    }


    public void clear(){
      if(table!=null){
            table.clear();
      }
    }

    public int readConfig(){
      int iRet=0;
      table.clear();
      ResourceBundle r=null;
      try{
            r=ResourceBundle.getBundle(sConfig);
            Enumeration ks=r.getKeys();
            String sKey,sValue;
            while(ks.hasMoreElements()){
                sKey=(String)(ks.nextElement());
                sValue=r.getString(sKey);
                sValue=sValue.trim();
                if(sValue!=null && sValue.length()>0){
                  sValue=Tools.a2u(sValue);
                  put(sKey,sValue);
                }
            }
      }catch(Exception e){
            iRet=-1;
      }
      r=null;
      return iRet;
    }

    public void put(String sKey,String sValue){
      if(sKey==null || sValue==null) return ;
      table.put(sKey.toLowerCase(),sValue);
    }

    public void list(){
      Enumeration e=table.keys();
      String s1,s2;
      while(e.hasMoreElements()){
            s1=(String)(e.nextElement());
            s2=get(s1);
            System.out.println("["+s1+"="+s2+"]");
      }
    }

    public String get(String sKey){
    //System.out.println("------Config_getString="+sKey);
      if(sKey==null) return null;
      sKey=sKey.toLowerCase();
      Object o=table.get(sKey);
      return (String)o;
    }

    public int getInt(String sKey){
    //System.out.println("------Config_getInt="+sKey);
      String s=get(sKey);
      //System.out.println("------Config_getInt="+sKey+",v="+s);
      int i=0;
      try{
            i=Integer.parseInt(s);
      }catch(Exception e){}
      return i;
    }

    public boolean getBool(String sKey){
      String s=get(sKey);
      if(s!=null && s.equalsIgnoreCase("true")){
            return true;
      }
      int i=getInt(sKey);
      if(i>0){
            return true;
      }
      return false;
    }

    public static void main(String []args){
      Config c=new Config(args);
      c.readConfig();
      c.list();
    }
}

//上面这个类是读取 properties 文件的,
//下面的类可读取自定义的配置文件
package com.cc.pub;

import java.io.*;

public class XConfig extends Config{

    private String sFileName;

    public XConfig(String sFile){
      sFileName=sFile;
    }

    public int readConfig(){
      clear();
      int i=size();
      try{
            int iCut=0;
            RandomAccessFile f=new RandomAccessFile(sFileName,"r");
            String sLine="";
            String sBuf="";
            boolean bNew=true;
            while(sLine!=null){
                sLine=f.readLine();
                if(sLine==null) break;
                sLine=Tools.a2u(sLine);//编码转换
                sLine=Tools.trim(sLine);    //空格等去除

                if(sLine.startsWith("#")){ //忽略 "#" 开始的注释行
                  continue;
                }
                if(sLine.startsWith("//")){ //忽略 "//" 开始的注释行
                  continue;
                }
                if(sLine.length()==0){ //忽略空行
                  continue;
                }
                bNew=true;
                if(sLine.startsWith("/")){//表示续前行
                  if(sLine.length()>1){
                        sLine=sLine.substring(1);
                        //sLine=Tools.rtrim(sLine);//删除 "/" 之后的空格
                  }else{
                        sLine="";
                  }
                  bNew=false;
                }
                iCut=sLine.indexOf("//");
                if(iCut>0){
                  sLine=sLine.substring(0,iCut); //删除本行后面的注释
                  sLine=Tools.rtrim(sLine);
                  if(sLine.length()==0){//如果为空行,继续
                        continue;
                  }
                }
                if(bNew){
                  addItem(sBuf);
                  sBuf=sLine;
                }else{
                  sBuf+=sLine;
                }
            }
            addItem(sBuf);
            f.close();
            i=size();
      }catch(Exception e){
            i=-1;
            e.printStackTrace();
      }
      return i;
    }


    private void addItem(String sMsg){
      if(sMsg==null || sMsg.length()==0){
            return;
      }
      int i=sMsg.indexOf("=");
      if(i<1 || i==sMsg.length()-1){
            return;
      }
      String sKey=sMsg.substring(0,i);
      String sValue=sMsg.substring(i+1);

      sKey=Tools.trim(sKey);
      sValue=Tools.trim(sValue);
      
      sValue=Tools.replace(sValue,"\\r","\r");
      sValue=Tools.replace(sValue,"\\n","\n");

      put(sKey,sValue);
    }

public static void main(String []args){
XConfig xc=new XConfig(args);
xc.readConfig();
xc.list();

//System.out.println("["+Tools.rtrim("Hello")+"]");
//System.out.println("["+Tools.ltrim("Hello")+"]");
}

}


//一个例子(配置文件)
#UDP中的信息长度最大字节数
udp_data_len=30000

#UDP超时长度(毫秒)
udp_timeout=512

#本地UDP短口号
udp_port=3000

#服务器所在的IP地址
server_ip=192.168.0.123

#服务器服务端口号
server_port=8001

#信息尝试发送次数
try_num=3

#每次尝试之间的时间间隔(秒)
try_period=10

//注释
cc_a=hello,how are you       //note
   / and you!      //note 继续
页: [1]
查看完整版本: 文本配置文件和属性文件(Properties)读取类