java读取ini文件

项目中要用到读取ini文件内容,百度加google后找到一篇个人认为很好的例子,地址http://rangerwolf.iteye.com/blog/1222882 。但是经过使用发现美中存在不足,1.还是存在中文乱码问题 。2,最后一个section的值获取不到。  后来debug了一下,发现貌似是逻辑判断的问题,个人改进了一番。

 

package fileIO;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class JavaRead_Ini2 {

	/**
	 * Simple reader methods for ini formated file using java Using UTF-8
	 * encoding. Support DBCS, such as Chinese, Japanese
	 * 
	 * @author Wenjun Yang
	 * @email yang.rangerwolf@gmail.com 2011-10-30
	 * 
	 */
	// section item value
	private static Map<String, HashMap<String, String>> sectionsMap = new HashMap<String, HashMap<String, String>>();
	// item value
	private static HashMap<String, String> itemsMap = new HashMap<String, String>();

	private static String currentSection = "";

	/**
	 * Load data from target file
	 * 
	 * @param file
	 *            target file. It should be in ini format
	 */
	private static void loadData(File file) {
		BufferedReader reader = null;
		try {
reader = new BufferedReader(new FileReader(file));  
			reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "gbk"));
			String line = null;
			while ((line = reader.readLine()) != null) {
				line = line.trim();
				if ("".equals(line))
					continue;
				if (line.startsWith("[") && line.endsWith("]")) {
					if (itemsMap.size() > 0
							&& !"".equals(currentSection.trim())) {
						sectionsMap.put(currentSection, itemsMap);
					}
					currentSection = "";

					// Start new section initial
					currentSection = line.substring(1, line.length() - 1);
					itemsMap = new HashMap<String, String>();
					itemsMap = new HashMap<String, String>();
					// Ends last section
					currentSection = line.substring(1, line.length() - 1);
					sectionsMap.put(currentSection, itemsMap);
					currentSection = "";

					// Start new section initial
				} else {
					int index = line.indexOf("=");
					if (index != -1) {
						String key = line.substring(0, index);
						String value = line.substring(index + 1, line.length());
						itemsMap.put(key, value);
					}
				}
				// System.out.println(line);
			}
			reader.close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (reader != null) {
				try {
					reader.close();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
		}
	}

	public static String getValue(String section, String item, File file) {
		loadData(file);

		HashMap<String, String> map = sectionsMap.get(section);
		if (map == null) {
			return "No such section:" + section;
		}
		String value = map.get(item);
		if (value == null) {
			return "No such item:" + item;
		}
		return value;
	}

	public static String getValue(String section, String item, String fileName) {
		File file = new File(fileName);
		return getValue(section, item, file);
	}

	public static List<String> getSectionNames(File file) {
		List<String> list = new ArrayList<String>();
		loadData(file);
		Set<String> key = sectionsMap.keySet();
		for (Iterator<String> it = key.iterator(); it.hasNext();) {
			list.add(it.next());
		}
		return list;
	}

	public static Map<String, String> getItemsBySectionName(String section,
			File file) {
		loadData(file);
		return sectionsMap.get(section);
	}
	
	public static void main(String[] args) {
		HashMap<String, String> dataMap = (HashMap)JavaRead_Ini2.getItemsBySectionName("temp", new File("D:/Subtitle.ini"));
		Iterator iter = dataMap.entrySet().iterator();
		while(iter.hasNext()){
			Map.Entry entry = (Map.Entry)iter.next();
			System.out.println(entry.getKey()+":"+entry.getValue());
		}
	}
}

 

前面打的参考的源码,后来自己修改了一下

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值