欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java实现解析ini文件对应到JavaBean中

程序员文章站 2022-03-08 18:09:57
目录1、ini文件简介2、ini文件3、ini解析工具类4、示例运行结果1、ini文件简介.ini 文件是initialization file的缩写,即初始化文件,是windows的系统配置文件所采...

1、ini文件简介

.ini 文件是initialization file的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式,统管windows的各项配置,ini文件也可以用来存放软件信息,在java开发当中有时候涉及到对接别的设备或者对接程序可能偶尔会遇到ini文件。

2、ini文件

这个是我的一个ini文件。现在想要解析这个文件,对应到javabean当中,从下面可以看出,这个ini有两个节点,也可以认为是两个java对象,一个是patient,一个是report。

Java实现解析ini文件对应到JavaBean中

这个是已经写好的一个工具类,可以直接复制粘贴使用的,没有依赖任何第三方jar包,在工具类最下面有一个main方法,就是用法示例。

3、ini解析工具类

import java.io.bufferedreader;
import java.io.filereader;
import java.io.ioexception;
import java.util.hashmap;
import java.util.map;
import java.util.properties;

public class parseiniutil {
    protected map<string,object> sections = new hashmap<string,object>();
    private transient string defaultname = "default";
    private transient string sectionname;
    private transient properties property;
    private properties parentobj;

    /**
     * 构造函数
     *
     * @param filename
     *            文件路径
     * @throws ioexception
     */
    public parseiniutil(string filename) throws ioexception {
        bufferedreader reader = new bufferedreader(new filereader(filename));
        read(reader);
        reader.close();
    }

    /**
     * 文件读取
     *
     * @param reader
     * @throws ioexception
     */
    protected void read(bufferedreader reader) throws ioexception {
        string line;
        sectionname = this.defaultname;
        property = new properties();
        sections.put(sectionname, property);

        while ((line = reader.readline()) != null) {
            parseline(line);
        }
    }

    /**
     * 解析每行数据
     *
     * @param line
     */
    protected void parseline(string line) {
        line = line.trim();
        if (line.indexof('#') == 0 || line.indexof(';') == 0) {
            return;
        }

        if (line.matches("\\[.*\\]")) {
            sectionname = line.replacefirst("\\[(.*)\\]", "$1").trim();
            property = new properties();
            if (sectionname.matches(".*:.*")) {
                int pos = sectionname.indexof(':');
                string child = sectionname.substring(0, pos);
                string parent = sectionname.substring(pos + 1);

                parentobj = this.getsection(parent);
                if (parentobj != null) {
                    property = (properties) parentobj.clone();
                    sections.put(child, property);
                }
            } else {
                sections.put(sectionname, property);
            }
        } else if (line.matches(".*=.*")) {
            int i = line.indexof('=');
            string name = line.substring(0, i).trim();
            string value = line.substring(i + 1).trim();

            if (value.indexof('"') == 0 || value.indexof('\'') == 0) {
                // 去掉前面符号 " 或 '
                value = value.substring(1, value.length());
                // 去掉后面 " 或 '
                int len = value.length();
                if (value.indexof('"') == len - 1 || value.indexof('\'') == len - 1) {
                    value = value.substring(0, len - 1);
                }
            }

            property.setproperty(name, value);
        }
    }

    /**
     * 根据节 和 key 获取值
     *
     * @param section
     * @param key
     * @return string
     */
    public string get(string section, string key) {
        if (section.equals(null) || section == "")
            section = this.defaultname;

        properties property = (properties) sections.get(section);
        if (property == null) {
            return null;
        }

        string value = property.getproperty(key);
        if (value == null)
            return null;

        return value;
    }

    /**
     * 获取节下所有key
     *
     * @param section
     * @return properties
     */
    public properties getsection(string section) {
        if (section.equals(null) || section == "")
            section = this.defaultname;

        properties property = (properties) sections.get(section);
        if (property == null) {
            sections.put(section, property);
        }

        return property;
    }

    /**
     * 增加节点 及 值
     *
     * @param section
     */
    public void set(string section, string key, string value) {
        if (property == null)
            property = new properties();

        if (section.equals(null) || section == "")
            section = this.defaultname;

        if (key.equals(null) || key == "") {
            system.out.println("key is null");
            return;
        }

        sections.put(section, property);
        property.setproperty(key, value);
    }

    /**
     * 增加节点
     *
     * @param section
     */
    public void setsection(string section) {
        sections.put(section, property);
    }

    public static void main(string[] args) {
        string filename = "c:\\users\\gxs\\desktop\\patient.ini";
        parseiniutil config = null;
        try {
            config = new parseiniutil(filename);
        } catch (ioexception e) {
            e.printstacktrace();
        }
        string app = config.get("patient", "orderid");
        system.out.println("orderid = " + app);

        string app1 = config.get("report", "postcode");
        system.out.println("postcode = " + app1);
    }
}

4、示例运行结果

Java实现解析ini文件对应到JavaBean中

有了这个应该想要解析ini对应到javabean当中不是什么问题了吧。

以上就是java实现解析ini文件对应到javabean中的详细内容,更多关于java解析ini文件的资料请关注其它相关文章!