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

SpringBoot框架如何管理Xml和CSV

程序员文章站 2022-03-07 12:46:18
目录一、文档类型简介1、xml文档xml是可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言。标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如数据结构,格...

一、文档类型简介

1、xml文档

xml是可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言。标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如数据结构,格式等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。适合网络传输,提供统一的方法来描述和交换应用程序的结构化数据。

2、csv文档

csv文档,以逗号分隔文档内容值,其文件以纯文本形式存储结构数据。csv文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号。csv是一种通用的、相对简单的文件格式,通常被用在大数据领域,进行大规模的数据搬运操作。

二、xml文件管理

1、dom4j依赖

dom4j是基于java编写的xml文件操作的api包,用来读写xml文件。具有性能优异、功能强大和简单易使用的特点。

<dependency>
    <groupid>dom4j</groupid>
    <artifactid>dom4j</artifactid>
    <version>1.6.1</version>
</dependency>
<dependency>
    <groupid>jaxen</groupid>
    <artifactid>jaxen</artifactid>
    <version>1.1.6</version>
</dependency>

2、基于api封装方法

涉及对xml文件读取、加载、遍历、创建、修改、删除等常用方法。

public class xmlutil {
    /**
     * 创建文档
     */
    public static document getdocument (string filename) {
        file xmlfile = new file(filename) ;
        document document = null;
        if (xmlfile.exists()){
            try{
                saxreader saxreader = new saxreader();
                document = saxreader.read(xmlfile);
            } catch (exception e){
                e.printstacktrace();
            }
        }
        return document ;
    }

    /**
     * 遍历根节点
     */
    public static document iteratornode (string filename) {
        document document = getdocument(filename) ;
        if (document != null) {
            element root = document.getrootelement();
            iterator iterator = root.elementiterator() ;
            while (iterator.hasnext()) {
                element element = (element) iterator.next();
                system.out.println(element.getname());
            }
        }
        return document ;
    }

    /**
     * 创建xml文档
     */
    public static void createxml (string filepath) throws exception {
        // 创建 document 对象
        document document = documenthelper.createdocument();
        // 创建节点,首个节点默认为根节点
        element rootelement = document.addelement("project");
        element parentelement = rootelement.addelement("parent");
        parentelement.addcomment("版本描述") ;
        element groupidelement = parentelement.addelement("groupid") ;
        element artifactidelement = parentelement.addelement("artifactid") ;
        element versionelement = parentelement.addelement("version") ;
        groupidelement.settext("springboot2");
        artifactidelement.settext("spring-boot-starters");
        versionelement.settext("2.1.3.release");
        //设置输出编码
        outputformat format = outputformat.createprettyprint();
        file xmlfile = new file(filepath);
        format.setencoding("utf-8");
        xmlwriter writer = new xmlwriter(new fileoutputstream(xmlfile),format);
        writer.write(document);
        writer.close();
    }

    /**
     * 更新节点
     */
    public static void updatexml (string filepath) throws exception {
        document document = getdocument (filepath) ;
        if (document != null){
            // 修改指定节点
            list elementlist = document.selectnodes("/project/parent/groupid");
            iterator iterator = elementlist.iterator() ;
            while (iterator.hasnext()){
                element element = (element) iterator.next() ;
                element.settext("spring-boot-2");
            }
            //设置输出编码
            outputformat format = outputformat.createprettyprint();
            file xmlfile = new file(filepath);
            format.setencoding("utf-8");
            xmlwriter writer = new xmlwriter(new fileoutputstream(xmlfile),format);
            writer.write(document);
            writer.close();
        }
    }

    /**
     * 删除节点
     */
    public static void removeelement (string filepath) throws exception {
        document document = getdocument (filepath) ;
        if (document != null){
            // 修改指定节点
            list elementlist = document.selectnodes("/project/parent");
            iterator iterator = elementlist.iterator() ;
            while (iterator.hasnext()){
                element parentelement = (element) iterator.next() ;
                iterator parentiterator = parentelement.elementiterator() ;
                while (parentiterator.hasnext()){
                    element childelement = (element)parentiterator.next() ;
                    if (childelement.getname().equals("version")) {
                        parentelement.remove(childelement) ;
                    }
                }
            }
            //设置输出编码
            outputformat format = outputformat.createprettyprint();
            file xmlfile = new file(filepath);
            format.setencoding("utf-8");
            xmlwriter writer = new xmlwriter(new fileoutputstream(xmlfile),format);
            writer.write(document);
            writer.close();
        }
    }
    public static void main(string[] args) throws exception {
        string filepath = "f:\\file-type\\project-cf.xml" ;
        // 1、创建文档
        document document = getdocument(filepath) ;
        system.out.println(document.getrootelement().getname());
        // 2、根节点遍历
        iteratornode(filepath);
        // 3、创建xml文件
        string newfile = "f:\\file-type\\project-cf-new.xml" ;
        createxml(newfile) ;
        // 4、更新xml文件
        updatexml(newfile) ;
        // 5、删除节点
        removeelement(newfile) ;
    }
}

3、执行效果图

SpringBoot框架如何管理Xml和CSV

三、csv文件管理

1、csv文件样式

SpringBoot框架如何管理Xml和CSV

这里不需要依赖特定的jar包,按照普通的文件读取即可。

2、文件读取

@async
@override
public void readnotify(string path, integer columnsize) throws exception {
    file file = new file(path) ;
    string filename = file.getname() ;
    int linenum = 0 ;
    if (filename.startswith("data-")) {
        inputstreamreader isr = new inputstreamreader(new fileinputstream(file),"gbk") ;
        bufferedreader reader = new bufferedreader(isr);
        list<datainfo> datainfolist = new arraylist<>(4);
        string line  ;
        while ((line = reader.readline()) != null) {
            linenum ++ ;
            string[] dataarray = line.split(",");
            if (dataarray.length == columnsize) {
                string cityname = new string(dataarray[1].getbytes(),"utf-8") ;
                datainfolist.add(new datainfo(integer.parseint(dataarray[0]),cityname,dataarray[2])) ;
            }
            if (datainfolist.size() >= 4){
                logger.info("容器数据:"+datainfolist);
                datainfolist.clear();
            }
        }
        if (datainfolist.size()>0){
            logger.info("最后数据:"+datainfolist);
        }
        reader.close();
    }
    logger.info("读取数据条数:"+linenum);
}

3、文件创建

@async
@override
public void createcsv(list<string> datalist,string path) throws exception {
    file file = new file(path) ;
    boolean createfile = false ;
    if (file.exists()){
        boolean deletefile = file.delete() ;
        logger.info("deletefile:"+deletefile);
    }
    createfile = file.createnewfile() ;
    outputstreamwriter ost = new outputstreamwriter(new fileoutputstream(path),"utf-8") ;
    bufferedwriter out = new bufferedwriter(ost);
    if (createfile){
        for (string line:datalist){
            if (!stringutils.isempty(line)){
                out.write(line);
                out.newline();
            }
        }
    }
    out.close();
}

4、编写测试接口

这里基于swagger2管理接口测试 。

@api("csv接口管理")
@restcontroller
public class csvweb {
    @resource
    private csvservice csvservice ;
    @apioperation(value="文件读取")
    @getmapping("/csv/readnotify")
    public string readnotify (@requestparam("path") string path,
                              @requestparam("column") integer columnsize) throws exception {
        csvservice.readnotify(path,columnsize);
        return "success" ;
    }
    @apioperation(value="创建文件")
    @getmapping("/csv/createcsv")
    public string createcsv (@requestparam("path") string path) throws exception {
        list<string> datalist = new arraylist<>() ;
        datalist.add("1,北京,beijing") ;
        datalist.add("2,上海,shanghai") ;
        datalist.add("3,苏州,suzhou") ;
        csvservice.createcsv(datalist,path);
        return "success" ;
    }
}

四、源代码地址

文中涉及文件类型,在该章节源码ware18-file-parent/case-file-type目录下。

github·地址

gitee·地址

以上就是springboot框架如何管理xml和csv的详细内容,更多关于springboot管理xml和csv的资料请关注其它相关文章!