使用java读取配置文件(ini、properties)

JDK自带的Properties可以读取properties类型的文件,但是对于ini文件进行读取时遇到转义字符时会有问题,例如当遇到STOREPATH = d:\test\,用Properties类读取时会将\t当成一个TAB来处理,因此自己写了一个简单读取配置文件的类,功能并不完善,对与ini文件中不同section中同名属性并没有做处理。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public final class ConfigUtils {
	public static Map<String, String> propMap = null;
	
	/** 初始化 */
	public static void init(String path){
		propMap = new HashMap<String, String>();
		BufferedReader br = null;
		try {
			br = new BufferedReader(new FileReader(path));
			String line = "";
			while((line = br.readLine()) != null){
				if(line.indexOf("=") != -1 && !line.trim().startsWith("#")
						 && !line.trim().startsWith("//")){
					String[] lineArr = line.split("=");
					propMap.put(lineArr[0].trim(), lineArr[1].trim());
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	/**
	 * 获取所有键值对组成的Map
	 * @param path 配置文件所在路径
	 * @return
	 */
	public static Map<String, String> getPropMap(String path){
//		if(propMap == null || propMap.isEmpty()){
		init(path);
//		}
		
		return propMap;
	}
	
	/**
	 * 获取属性值
	 * @param path 配置文件所在路径
	 * @param key 属性名
	 * @return
	 */
	public static String getPropValue(String path, String key){
//		if(propMap == null || propMap.isEmpty()){
		init(path);
//		}
		
		return propMap.get(key);
	}
	
	/**
	 * 设置某个属性的值
	 * @param path
	 * @param key
	 * @param value
	 */
	public static void setPropValue(String path, String key, String value){
		Map<String, String> map = new HashMap<String, String>();
		map.put(key, value);
		setPropValues(path, map);
	}
	
	/**
	 * 根据Map设置属性
	 * @param path
	 * @param map
	 */
	public static void setPropValues(String path, Map<String, String> map){
		BufferedReader br = null;
		BufferedWriter bw = null;
		try {
			br = new BufferedReader(new FileReader(path));
			
			StringBuffer sb = new StringBuffer();
			String line = "";
			// 读取文件并对替换文件内容
			while((line = br.readLine()) != null){
				if(line.indexOf("=") != -1 && !line.trim().startsWith("#")
						 && !line.trim().startsWith("//")){
					String[] lineArr = line.split("=");
					String key = lineArr[0].trim();
					String newValue = map.get(key);
					if(null != newValue && !"".equals(newValue)){
						sb.append(key).append(" = ").append(newValue).append("\r\n");
					}else{
						sb.append(line).append("\r\n");
					}
				}else{
					sb.append(line).append("\r\n");
				}
			}
			br.close();
			bw = new BufferedWriter(new FileWriter(path));
			// 写入文件
			bw.write(sb.toString());
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				br.close();
				bw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	


	/** */
	/**
	 * 程序测试
	 */
	public static void main(String[] args) {

	}
}


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值