论坛首页 Java企业应用论坛

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

浏览 2897 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-11-16  
//注意:我的博客中的代码为自己所写,大家可以免费使用,但不要...
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[0]);
        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[0]);
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 继续
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics