java 讀寫 ini 配置檔案

dubaiupup發表於2022-01-11
  
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();
         }
     }
     
}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31558068/viewspace-2851458/


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70012648/viewspace-2851709/,如需轉載,請註明出處,否則將追究法律責任。

相關文章