文本配置文件和属性文件(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[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 继续
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值