一個java操作ini格式文件的工具類,支持增刪查改,不過由於項目所需,只做了針對單行的操作。寫得不好求指教。

package com.other;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Properties;

import com.TouchLife.touchlife.Manager.Global;

/**
 * INI文件操作類。增刪查改
 * @author ckw
 * 2014年6月26日
 */
public class ReadIni {
	private static HashMap<String, Properties> iniInfo = new HashMap<String, Properties>();
	private static String currentSecion;
	private static Properties properties;
	public static final String fileUrl = Global.RootPath+"BaseConfig.ini";	 //配置文件的路徑
	public ReadIni(){

		try {
			File file = new File(fileUrl);
			if (file.exists()) {
				BufferedReader reader = new BufferedReader(new FileReader(fileUrl));
				read(reader);
			} else {
				file.getParentFile().mkdirs();	// getParentFile()返回File類型的父路徑,mkdirs()創建所有的路徑					
				file.createNewFile(); // 創建了文件	
		
			}

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

	protected void read(BufferedReader reader) throws IOException {
		String line;
		while ((line = reader.readLine()) != null) {
			parseLine(line);
		}
		reader.close();
	}

	/**
	 * 讀取每一行
	 * @param line
	 */
	private void parseLine(String line) {
		line = line.trim();
		if (line.matches("\\[.*\\]") == true) {
			currentSecion = line.replaceFirst("\\[(.*)\\]", "$1");
			properties = new Properties();
			iniInfo.put(currentSecion, properties);
		} else if (line.matches(".*=.*") == true) {
			if (properties != null) {
				int i = line.indexOf('=');
				String key = line.substring(0, i);
				String value = line.substring(i + 1);
				properties.setProperty(key, value);
				
			}
		}
	}

	/**
	 * 根據節、鍵名獲取值
	 * @param section	節名
	 * @param key		鍵名
	 * @return
	 */
	public String getValue(String section, String key) {
		Properties p = (Properties) iniInfo.get(section);
		if (p == null) {
			return null;
		}
		String value = p.getProperty(key);
		return value;
	}
	
	
	/**
	* 新增一行。新增之前判斷是否存在,如果存在就修改值。若不存在則新增。
	* 
	* @param section
	*            要修改的變量所在段名稱
	* @param variable
	*            要修改的變量名稱
	* @param value
	*            變量的新值
	*/
	public  void setValue(String section,String variable, String value){
		if(getValue(section, variable) == null){
			try {
				addValue(section, variable, value);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}else if(getValue(section,variable).equals("")){
			try {
				updateValue(section, variable, value);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}else{
			System.out.println("已存在");
			return;
		}
	}

	public static boolean addValue(String section,String variable, String value) throws IOException {
		String fileContent, line, newLine;
		BufferedReader bufferedReader = new BufferedReader(new FileReader(fileUrl));
		fileContent = "";
	
		try {
			while ((line = bufferedReader.readLine()) != null) {
				line = line.trim();
				if (line.matches("\\[.*\\]") == true) {
					if(line.replaceFirst("\\[(.*)\\]", "$1").equals(section)){
						newLine = line+"\r\n"+variable + "=" + value;
						fileContent += newLine +"\r\n";
					
						while ((line = bufferedReader.readLine()) != null) {
							
							fileContent += line + "\r\n";
						}
						//定義編碼
			            OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(fileUrl,false), "UTF-8");		   
						BufferedWriter bufferedWriter = new BufferedWriter(write);
						bufferedWriter.write(fileContent);
						bufferedWriter.flush();
						bufferedWriter.close();
						System.out.println("插入成功");
						return true;
						//continue;
					}else{
						fileContent += line + "\r\n";
						continue;
					}	
				
				}
				fileContent += line + "\r\n";
				
			
			}
		} catch (IOException ex) {
			throw ex;
		} finally {
			bufferedReader.close();
		}
		return false;
	}
	
	/**
	* 修改ini配置文件中變量的值
	* 
	* @param section
	*            要修改的變量所在段名稱
	* @param variable
	*            要修改的變量名稱
	* @param value
	*            變量的新值
	* @throws IOException
	*            拋出文件操作可能出現的io異常
	*/
	public static boolean updateValue(String section,String variable, String value) throws IOException {
		String fileContent, line, newLine;
		BufferedReader bufferedReader = new BufferedReader(new FileReader(fileUrl));
		fileContent = "";
		try {
			while ((line = bufferedReader.readLine()) != null) {
				
				line = line.trim();
				if (line.matches(".*=.*") == true) {
					
					int i = line.indexOf('=');
					String key = line.substring(0, i);
					if(key.equals(variable)){
						newLine = key + "=" + value;
						fileContent += newLine + "\r\n";
						while ((line = bufferedReader.readLine()) != null) {
							fileContent += line + "\r\n";
						}
						bufferedReader.close();
						OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(fileUrl,false), "UTF-8");		   
						BufferedWriter bufferedWriter = new BufferedWriter(write);
						bufferedWriter.write(fileContent);
						bufferedWriter.flush();
						bufferedWriter.close();
						System.out.println("修改成功");
						return true;
					}
					
				}			
				fileContent += line + "\r\n";
			}
		} catch (IOException ex) {
			throw ex;
		} finally {
			bufferedReader.close();
		}
		return false;
	}

	/**
	 * 刪除指定行
	 * @param section	 要刪除的變量所在段名稱
	 * @param variable	要刪除的變量名稱
	 * @return
	 * @throws IOException
	 */
	public static boolean deleteKey(String section,String variable) throws IOException{
		String fileContent, line, newLine;
		BufferedReader bufferedReader = new BufferedReader(new FileReader(fileUrl));
		fileContent = "";
		try {
			while ((line = bufferedReader.readLine()) != null) {
				
				line = line.trim();
				if (line.matches(".*=.*") == true) {
					
					int i = line.indexOf('=');
					String key = line.substring(0, i);
					if(key.equals(variable)){
						newLine = "";
						fileContent += newLine;
						while ((line = bufferedReader.readLine()) != null) {
							fileContent += line + "\r\n";
						}
						bufferedReader.close();
						
						OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(fileUrl,false), "UTF-8");		   
						BufferedWriter bufferedWriter = new BufferedWriter(write);
						bufferedWriter.write(fileContent);
						bufferedWriter.flush();
						bufferedWriter.close();
						System.out.println("刪除 成功");
						return true;
					}
					
				}			
				fileContent += line + "\r\n";
			}
		} catch (IOException e) {
			throw e;
		} finally {
			bufferedReader.close();
		}
		return false;
	}
	
	/**
	 * 插入所有內容
	 * @param fileUrl	 配置文件的路徑
	 * @param allInfo	所有信息
	 * @return
	 */
	public static boolean addAllValue(String allInfo){
		try{
			OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(fileUrl,false), "UTF-8");		   
			BufferedWriter bufferedWriter = new BufferedWriter(write);
			bufferedWriter.write(allInfo);
			bufferedWriter.flush();
			bufferedWriter.close();
			return true;
		}catch(Exception e){
			e.printStackTrace();
			return false;
		}
		
	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章