程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> 用java讀寫ini配置文件的原因以及實現

用java讀寫ini配置文件的原因以及實現

編輯:JAVA編程入門知識
  在Java中,配置文件一般主要是兩種形式:XML文件或者property文件。但大部分人都習慣使用ini文件,而且ini文件的分節以及注釋功能,比起xml,也是易懂易用的。
  
  在vc中類庫中有讀寫ini文件的標准函數。在dephi或其他語言中,也可以用windows的api函數來讀寫ini文件。但在java中似乎沒有現成的類和方法可供使用。雖然java可以通過加載dll文件的方法來調用windows的api,但總覺得不夠正宗。
  
  於是自己寫了個讀寫ini配置文件的類,供大家參考。
  
  import java.io.BufferedReader;
  import java.io.BufferedWriter;
  import java.io.FileReader;
  import java.io.FileWriter;
  import java.io.IOException;
  import java.util.regex.Matcher;
  import java.util.regex.Pattern;
  
  /**
  * 這是個配置文件操作類,用來讀取和設置ini配置文件
  * @author 由月
  * @version 2004-08-18
  */
  public final class ConfigurationFile {
  /**
  * 從ini配置文件中讀取變量的值
  * @param file 配置文件的路徑
  * @param section 要獲取的變量所在段名稱
  * @param variable 要獲取的變量名稱
  * @param defaultValue 變量名稱不存在時的默認值
  * @return 變量的值
  * @throws IOException 拋出文件操作可能出現的io異常
  */
  public static String getProfileString(
  String file,
  String section,
  String variable,
  String defaultValue)
  throws IOException {
  String strLine, value = "";
  BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
  boolean isInSection = false;
  try {
  while ((strLine = bufferedReader.readLine()) != null) {
  strLine = strLine.trim();
  strLine = strLine.split("[;]")[0];
  Pattern p;
  Matcher m;
  p = Pattern.compile("[s*.*s*]");
  m = p.matcher((strLine));
  if (m.matches()) {
  p = Pattern.compile("[s*" + section + "s*]");
  m = p.matcher(strLine);
  if (m.matches()) {
  isInSection = true;
  } else {
  isInSection = false;
  }
  }
  if (isInSection == true) {
  strLine = strLine.trim();
  String[] strArray = strLine.split("=");
  if (strArray.length == 1) {
  value = strArray[0].trim();
  if (value.equalsIgnoreCase(variable)) {
  value = "";
  return value;
  }
  } else if (strArray.length == 2) {
  value = strArray[0].trim();
  if (value.equalsIgnoreCase(variable)) {
  value = strArray[1].trim();
  return value;
  }
  } else if (strArray.length > 2) {
  value = strArray[0].trim();
  if (value.equalsIgnoreCase(variable)) {
  value = strLine.substring(strLine.indexOf("=") + 1).trim();
  return value;
  }
  }
  }
  }
  } finally {
  bufferedReader.close();
  }
  return defaultValue;
  }
  /**
  * 修改ini配置文件中變量的值
  * @param file 配置文件的路徑
  * @param section 要修改的變量所在段名稱
  * @param variable 要修改的變量名稱
  * @param value 變量的新值
  * @throws IOException 拋出文件操作可能出現的io異常
  */
  public static boolean setProfileString(
  String file,
  String section,
  String variable,
  String value)
  throws IOException {
  String fileContent, allLine,strLine, newLine, remarkStr;
  String getValue;
  BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
  boolean isInSection = false;
  fileContent = "";
  try {
  
  while ((allLine = bufferedReader.readLine()) != null) {
  allLine = allLine.trim();
  if (allLine.split("[;]").length > 1)
  remarkStr = ";" + allLine.split(";")[1];
  else
  remarkStr = "";
  strLine = allLine.split(";")[0];
  Pattern p;
  Matcher m;
  p = Pattern.compile("[s*.*s*]");
  m = p.matcher((strLine));
  if (m.matches()) {
  p = Pattern.compile("[s*" + section + "s*]");
  m = p.matcher(strLine);
  if (m.matches()) {
  isInSection = true;
  } else {
  isInSection = false;
  }
  }
  if (isInSection == true) {
  strLine = strLine.trim();
  String[] strArray = strLine.split("=");
  getValue = strArray[0].trim();
  if (getValue.equalsIgnoreCase(variable)) {
  newLine = getValue + " = " + value + " " + remarkStr;
  fileContent += newLine + " ";
  while ((allLine = bufferedReader.readLine()) != null) {
  fileContent += allLine + " ";
  }
  bufferedReader.close();
  BufferedWriter bufferedWriter =
  new BufferedWriter(new FileWriter(file, false));
  bufferedWriter.write(fileContent);
  bufferedWriter.flush();
  bufferedWriter.close();
  
  return true;
  }
  }
  fileContent += allLine + " ";
  }
  }catch(IOException ex){
  throw ex;
  } finally {
  bufferedReader.close();
  }
  return false;
  }
  /**
  * 程序測試
  */
  public static void main(String[] args) {
  //String value = Config.getProfileString("sysconfig.ini", "Option", "OracleDB", "default");
  //System.out.println(value);
  try {
  System.out.println(ConfigurationFile.setProfileString("d:/1.ini", "Settings", "SampSize", "111"));
  } catch (IOException e) {
  System.out.println(e.toString());
  }
  }
  }
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved