JAVA读写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
 * @date 2011-12-1 上午07:58:57
 * 
 * @version 1.0
 */
public class IniFile
{
    private static String RN = "\r\n";

    /**
     * 从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, valueString = "";
        BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
        boolean isInSection = false;
        try
        {
            while ((strLine = bufferedReader.readLine()) != null)
            {
                // 读取INI文件到内存

                strLine = strLine.trim();
                Pattern p;
                Matcher m, m2;
                p = Pattern.compile("\\[\\s*" + section + "\\s*\\]");
                Pattern p2 = Pattern.compile("\\[.*\\]");
                m = p.matcher((strLine));
                m2 = p2.matcher((strLine));
                if (m2.find())
                {
                    if (m.find())
                    {
                        isInSection = true;
                    } else
                    {
                        isInSection = false;
                    }
                }
                if (isInSection == true)
                {
                    strLine = strLine.trim();
                    String[] strArray = strLine.split("=");
                    if (strArray.length == 2)
                    {
                        valueString = strArray[0].trim();
                        if (valueString.equalsIgnoreCase(variable))
                        {
                            valueString = strLine.substring(strLine.indexOf("=") + 1).trim();
                            return valueString;
                        }
                    }
                }

            }
        } catch (Exception e)
        {
            // TODO: handle exception

        } 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;
        BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
        boolean isInSection = false;
        fileContent = "";
        try
        {
            while ((allLine = bufferedReader.readLine()) != null)
            {
                allLine = allLine.trim();
                Pattern p;
                Matcher m, m2;
                p = Pattern.compile("\\[\\s*" + section + "\\s*\\]");
                Pattern p2 = Pattern.compile("\\[.*\\]");
                m = p.matcher((allLine));
                m2 = p2.matcher((allLine));
                if (m2.find())
                {
                    if (m.find())
                    {
                        isInSection = true;
                    } else
                    {
                        isInSection = false;
                    }
                }
                if (isInSection == true)
                {
                    String[] strArray = allLine.split("=");
                    if (allLine.indexOf("=") > 0)
                    {
                        String valueString = strArray[0].trim();
                        if (valueString.equalsIgnoreCase(variable))
                        {
                            String newLine = valueString + "=" + value;
                            fileContent += "    " + newLine + RN;
                        } else
                        {
                            fileContent += "    " + allLine + RN;
                        }
                    } else
                    {
                        fileContent += allLine + RN;
                    }
                } else
                {
                    if (allLine.indexOf("=") > 0)
                    {
                        fileContent += "    " + allLine + RN;
                    } else
                    {
                        fileContent += allLine + RN;
                    }
                }
            }
            // System.out.println(fileContent);
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file, false));
            bufferedWriter.write(fileContent);
            bufferedWriter.flush();
            bufferedWriter.close();
            return true;
        } catch (Exception e)
        {

            e.printStackTrace();
        } finally
        {
            bufferedReader.close();
        }
        return false;
    }

    /**
     * 
     * 说明
     * 
     * @param args
     * @author
     * @date 2011-12-1 上午08:00:01
     */
    public static void main(String[] args)
    {

        try
        {
            System.out.println("write!...  "
                    + IniFile.setProfileString("1.ini",
                            "GENERAL", "OPERATOR", "22"));
            System.out.println("read!... "
                    + IniFile.getProfileString("1.ini",
                            "GENERAL", "OPERATOR", ""));

        } catch (IOException e)
        {
            System.out.println(e.toString());
        }

    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值