当前位置导航:炫浪网>>网络学院>>编程开发>>JAVA教程>>Java入门

用java读写ini配置文件的原因以及实现


  在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 + "\r\n";
  while ((allLine = bufferedReader.readLine()) != null) {
  fileContent += allLine + "\r\n";
  }
  bufferedReader.close();
  BufferedWriter bufferedWriter =
  new BufferedWriter(new FileWriter(file, false));
  bufferedWriter.write(fileContent);
  bufferedWriter.flush();
  bufferedWriter.close();
  
  return true;
  }
  }
  fileContent += allLine + "\r\n";
  }
  }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());
  }
  }
  }
  
相关内容
赞助商链接