java 读写 ini 配置文件

简介: java 读写 ini 配置文件
package org.fh.util;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URLDecoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * 说明:ini文件读写操作工具类
 * 作者:FH Admin
 * from:fhadmin.cn
 */
public class IniFileUtil {
  /**
   * 从ini配置文件中读取变量的值
   * @param file         配置文件的路径
   * @param section      要获取的变量所在段名称
   * @param variable     要获取的变量名称
   * @param defaultValue 变量名称不存在时的默认值
   * @return 变量的值
   * @throws IOException 抛出文件操作可能出现的io异常
   */
  public static String readCfgValue(String file, String section, String variable, String defaultValue)
      throws IOException {
    String strLine, value = "";
    BufferedReader bufferedReader = new BufferedReader(new FileReader(URLDecoder.decode(file, "UTF-8"))); //解决中文路径乱码
    boolean isInSection = false;
    try {
      while ((strLine = bufferedReader.readLine()) != null) {
        strLine = strLine.trim();
        strLine = strLine.split("[;]")[0];
        Pattern p;
        Matcher m;
        p = Pattern.compile("\\[\\w+]");// Pattern.compile("file://[//s*.*//s*//]");
        m = p.matcher((strLine));
        if (m.matches()) {
          p = Pattern.compile("\\[" + section + "\\]");// Pattern.compile("file://[//s*" + section +
                                  // "file://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 writeCfgValue(String file, String section, String variable, String value) throws IOException {
    String fileContent, allLine, strLine, newLine;
    String getValue = null;
    BufferedReader bufferedReader = new BufferedReader(new FileReader(URLDecoder.decode(file, "UTF-8"))); //解决中文路径乱码
    boolean isInSection = false;
    boolean canAdd = true;
    fileContent = "";
    try {
      while ((allLine = bufferedReader.readLine()) != null) {
        allLine = allLine.trim();
        strLine = allLine.split(";")[0];
        Pattern p;
        Matcher m;
        p = Pattern.compile("\\[\\w+]");
        m = p.matcher((strLine));
        if (m.matches()) {
          p = Pattern.compile("\\[" + section + "\\]");
          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;
            fileContent += newLine;
            while ((allLine = bufferedReader.readLine()) != null) {
              fileContent += "\r\n" + allLine;
            }
            bufferedReader.close();
            canAdd = false;
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file, false));
            bufferedWriter.write(fileContent);
            bufferedWriter.flush();
            bufferedWriter.close();
            return true;
          }
        }
        fileContent += allLine + "\r\n";
      }
      if (canAdd) {
        String str = variable + "=" + value;
        fileContent += str + "\r\n";
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file, false));
        bufferedWriter.write(fileContent);
        bufferedWriter.flush();
        bufferedWriter.close();
      }
    } catch (IOException ex) {
      throw ex;
    } finally {
      bufferedReader.close();
    }
    return false;
  }
  public static void main(String[] args) {
    try {
      /*;文件事例
      [Client]
      ;客户端版本号
      version=0001
      ;设备号
      devNum=6405*/
      String value = IniFileUtil.readCfgValue("L:/a.ini", "Client", "devNum", "1");
      System.out.println(value);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

 

目录
相关文章
|
5月前
|
XML 数据采集 JavaScript
Java【XML 配置文件解析】
Java【XML 配置文件解析】
|
12天前
|
Java
Java快读写法
Java快读写法
10 3
|
28天前
|
Java
Java配置大揭秘:读取自定义配置文件的绝佳指南
Java配置大揭秘:读取自定义配置文件的绝佳指南
19 0
Java配置大揭秘:读取自定义配置文件的绝佳指南
|
2月前
|
XML 缓存 Java
Java程序读写性能提升和数据一致性的总结
Java程序读写性能提升和数据一致性的总结
11 1
|
2月前
|
Java
使用Java读写dbf文件【附源代码】
使用Java读写dbf文件【附源代码】
|
7月前
|
JSON Java 数据库
【Java】Spring Boot 配置文件
【Java】Spring Boot 配置文件
|
5月前
|
Java
Java【问题 05】yml配置文件boolean一直为false问题分析解决
Java【问题 05】yml配置文件boolean一直为false问题分析解决
67 0
|
5月前
|
Java 关系型数据库 MySQL
某Java程序员在外包公司每天读写删改几年后,发现跳不出来了
面试了一波Java程序员,有好几位80后的。按理说,他们有将近十年的工作开发时间,无论经验还是技术都应该称得上老司机了。着重考察了Spring中bean的后置处理器相关问题,大概是这样问的:
|
5月前
|
XML Java 数据格式
Java中的Properties类详解Properties配置文件
Java中的Properties类详解Properties配置文件
40 0
|
6月前
|
Java
java读取配置文件和获得项目根目录
java读取配置文件和获得项目根目录