目录

    一、文档类型简介

    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、执行效果图

    三、csv文件管理

    1、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的资料请关注www.887551.com其它相关文章!