您的位置:首页 > 其它

读写INI配置文件

2013-10-11 08:43 441 查看
/*

 * [ 文件实现功能 ]  : 配置文件读取文件

 */

package ConfigIniFile;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.util.logging.Level;

import java.util.logging.Logger;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class ConfigIniFile {

    String fileName = "";

    /**

     * 构造函数,初始化文件路径

     */

    public ConfigIniFile(String fileName) {

        this.fileName = fileName;

        File file = new File(fileName);

        if (!file.exists()) {

            try {

                file.createNewFile();

            } catch (IOException ex) {

                Logger.getLogger(ConfigIniFile.class.getName()).log(Level.SEVERE, null, ex);

            }

        }

    }

    /**

     * 从ini配置文件中读取变量的值

     *

     * @param fileName 配置文件的路径

     * @param section 要获取的变量所在段名称

     * @param variable 要获取的变量名称

     * @param defaultValue 变量名称不存在时的默认值

     * @return 变量的值

     * @throws IOException 抛出文件操作可能出现的io异常

     */

    public String getConfiguration(String section, String variable,

            String defaultValue) {

        String fileContent = "";

        String newLine = "";

        String allLine = "";

        String strLine, value = "";

        BufferedReader bufferedReader = null;

        boolean isInSection = false;

        boolean isInSectionLast = false;

        boolean isFindSection = false;

        boolean hasWrite = false;

        //试读配置文件,看配置文件是否存在,如果不存在则创建

        tryFile(fileName);

        try {

            bufferedReader = new BufferedReader(new FileReader(fileName));

            while ((strLine = bufferedReader.readLine()) != null) {

                allLine = strLine;

                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) {

                    isFindSection = 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;

                        }

                    }

                } else if (isInSectionLast) {

                    //从段内到了段外,没有找到键,使用默认键值,并将其写入配置文件

                    newLine = variable + "=" + defaultValue + ";";

                    fileContent += newLine + "\r\n";

                    hasWrite = true;

                }

                isInSectionLast = isInSection;

                fileContent += allLine + "\r\n";

            }

            if (!isFindSection) {

                //没有找到对应段,创建新的段和新的默认值

                newLine = "[" + section + "]" + "\r\n";

                fileContent += newLine;

                newLine = variable + "=" + defaultValue + ";" + "\r\n";

                fileContent += newLine;

            } else if ((!hasWrite) && isInSectionLast) {

                newLine = variable + "=" + defaultValue + ";" + "\r\n";

                fileContent += (variable + "=" + defaultValue + ";" + "\r\n");

            }

            //修正配置文件

            bufferedReader.close();

            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(fileName, false));

            bufferedWriter.write(fileContent);

            bufferedWriter.flush();

            bufferedWriter.close();

        } catch (Exception e) {

        } finally {

            try {

                bufferedReader.close();

            } catch (IOException ex) {

                Logger.getLogger(ConfigIniFile.class.getName()).log(Level.SEVERE, null, ex);

            }

        }

        return defaultValue;

    }

    /**

     * 修改ini配置文件中变量的值

     *

     * @param fileName 配置文件的路径

     * @param section 要修改的变量所在段名称

     * @param variable 要修改的变量名称

     * @param value 变量的新值

     * @throws IOException 抛出文件操作可能出现的io异常

     */

    public boolean setConfiguration(String section, String variable,

            String value) {

        String fileContent, allLine, strLine, newLine, remarkStr;

        String getValue;

        BufferedReader bufferedReader = null;

        boolean isInSection = false;

        boolean isInSectionLast = false;

        fileContent = "";

        //试读配置文件,看配置文件是否存在,如果不存在则创建

        tryFile(fileName);

        try {

            bufferedReader = new BufferedReader(new FileReader(fileName));

            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) {

                    strLine = strLine.trim();

                    String[] strArray = strLine.split("=");

                
abe9
    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(fileName, false));

                        bufferedWriter.write(fileContent);

                        bufferedWriter.flush();

                        bufferedWriter.close();

                        return true;

                    }

                } else if (isInSectionLast) {

                    //从段内到了段外,没找到键项只能新建一项了

                    newLine = variable + "=" + value + remarkStr;

                    fileContent += newLine + "\r\n";

                    fileContent += allLine + "\r\n";

                    while ((allLine = bufferedReader.readLine()) != null) {

                        fileContent += allLine + "\r\n";

                    }

                    bufferedReader.close();

                    BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(fileName, false));

                    bufferedWriter.write(fileContent);

                    bufferedWriter.flush();

                    bufferedWriter.close();

                    return true;

                }

                isInSectionLast = isInSection;

                fileContent += allLine + "\r\n";

            }

            if (!isInSection) {

                //没有找到指定的段

                newLine = "[" + section + "]" + "\r\n";

                fileContent += newLine;

                newLine = variable + "=" + value + "\r\n";// ";" +

                fileContent += newLine;

                bufferedReader.close();

                BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(fileName, false));

                bufferedWriter.write(fileContent);

                bufferedWriter.flush();

                bufferedWriter.close();

                return true;

            } else {

                //找到了指定的段,但是没有指定的参数,添加

                newLine = variable + "=" + value + "\r\n";//";" +

                fileContent += newLine;

                bufferedReader.close();

                BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(fileName, false));

                bufferedWriter.write(fileContent);

                bufferedWriter.flush();

                bufferedWriter.close();

                return true;

            }

        } catch (IOException ex) {

        } finally {

            try {

                bufferedReader.close();

            } catch (IOException ex) {

                Logger.getLogger(ConfigIniFile.class.getName()).log(Level.SEVERE, null, ex);

            }

        }

        return false;

    }

    /**

     * 方法说明:如果文件不存在则创建

     *

     * @param fileName文件名

     */

    private static void tryFile(String fileName) {

        File file = new File(fileName);

        if (!file.exists()) {

            try {

                file.createNewFile();

            } catch (IOException ex) {

            }

        }

    }

    public static void main(String[] args) {

        ConfigIniFile ini = new ConfigIniFile("config.ini");

        ini.setConfiguration("ini", "name", "张三");

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  读写配置文件 INI