一、文档类型简介

1、XML文档

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

2、CSV文档

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

二、XML文件管理

1、Dom4j依赖

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

dom4j

dom4j

1.6.1

jaxen

jaxen

1.1.6

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 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 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 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·地址

https://github.com/cicadasmile/middle-ware-parent

GitEE·地址

https://gitee.com/cicadasmile/middle-ware-parent

boot spring 解析csv_文件系统(02):基于SpringBoot框架,管理Xml和CSV文件类型-阿里云开发者社区...相关推荐

  1. 文件系统(02):基于SpringBoot框架,管理Xml和CSV文件类型

    本文源码:GitHub·点这里 || GitEE·点这里 一.文档类型简介 1.XML文档 XML是可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言.标记指计算机所能理解的信息符号,通过 ...

  2. mysql 轨迹数据存储_基于Tablestore实现海量运动轨迹数据存储-阿里云开发者社区...

    前言 现在越来越多的人都开始关心自己的运动数据,比如每日的计步.跑步里程.骑行里程等.运动APP与运动类的穿戴设备借助传感器.地图.GPS定位等技术,收集好运动数据以后,通过与互联网社交功能结合,产生 ...

  3. strtus2改成springboot_jdk1.6环境下struts2改spring boot方案-阿里云开发者社区

    公司目前上线的两个项目都是比较老的,java版本是jdk1.6,mvc框架使用的是strus2. 随着不久前struts2官方公布新的安全漏洞,我们也不得不做出相应的整改措施,除了之前博文中所说把st ...

  4. spring mysql_eclipse中spring访问mysql的简易实现-阿里云开发者社区

    eclipse中构建一个maven基础上的带有TestNG测试插件的spring项目 目录结构如下所示: 这个简易的实现,包括四个文件 1.java源码(访问数据库代码) 2.测试源码(TestNG测 ...

  5. springboot日志按照天自动输出_SpringBoot使用logback实现日志按天滚动-阿里云开发者社区...

    SpringBoot使用logback实现日志按天滚动 需求 日志按天滚动分割 info和error日志输出到不同文件 为什么使用Logback 在这里,我不去深究的讨论各个日志框架的优劣,网上的对比 ...

  6. 基于开源应用快速构建HTAP系统(2)-阿里云开发者社区

    上述规则的意思是,当SELECT语句中包含 "+CLICKHOUSE" 关键字时,就会自动转发到 ClickHouse 后端去处理,其余的都发送到MySQL后端处理.例如下面这两条 ...

  7. mysql异地多活方案_基于MGR高可用异地多活方案-阿里云开发者社区

    一.概述 主要目的实现MySQL高可用解决方案,实现异地多活. 二.实现构思 基于MGR实现高可用异地多活 首先要基于位置信息进行分片,例如华北 华中,华南,程序层要进行ip过滤和判断, 针对不同的i ...

  8. api报错 javaee maven_maven test 换javaee6 无法加载spring的配置文件 ?报错-问答-阿里云开发者社区-阿里云...

    maven 构建的springmvc项目,执行mvn test 时 如果是 org.apache.openejb javaee-api 5.0-3 那么执行test可以通过 如果将version改为6 ...

  9. python部署到服务器上解析不到模块_python socket模块放到服务器上就跑不了了 -问答-阿里云开发者社区-阿里云...

    话不多说直接放代码: 先说一下,下面出现的101.133.229.251是我服务器IP 客户端: import socket s = socket.socket(socket.AF_INET,sock ...

最新文章

  1. 让文本垂直居中的几个方法
  2. php文件里直接写上?xml version=1.0 encoding=utf-8?出错?
  3. 【Spring-Boot】【入门 01】第一个 Spring Boot 程序
  4. 解决windows10系统ssh-add报错的问题
  5. 学习环境配置:Manjaro、MSYS2以及常见软件
  6. 实现网站验证码切换功能
  7. NUMA架构和Java
  8. Docker 方式安装 RabbitMQ (ribbitmq linux 部署)
  9. 【操作系统】高速缓存和缓冲区
  10. Docker制作镜像、启动容器、查看版本、修改源、安装工具
  11. Nagios飞信linux系统免费短信报警配置
  12. JAVA中的isMirror函数_Swift中的反射Mirror
  13. 数学分析 复合函数求导法则
  14. 【STM32F429的DSP教程】第13章 DSP快速计算函数-三角函数和平方根
  15. 宝马、奔驰、路虎、捷豹、卡宴、杜比音效DTS音乐下载
  16. 阿里云和Azure ICON图标矢量素材分享
  17. 学信网电子学历备案表怎么弄
  18. HTML+CSS个人静态网页设计
  19. Context-Free Grammar及形状规则集
  20. python 传奇服务端_Python官方最后通牒:Python 2传奇20年将落幕,Python 3接力!

热门文章

  1. mysql indentify by_测试工作中常用到的sql命令!!!
  2. java 弱引用 集合_java 弱引用集合类WeakHashMap
  3. mysql 6.3 入门_Mysql 入门小练习
  4. 江苏省计算机学会科学技术奖,孙国梓
  5. 某同学使用计算机求30,概率论与数理统计习题集及答案
  6. oracle 逻辑回归,逻辑回归 (Logistic Regression):计算概率
  7. java火山_各种排序算法java实现
  8. 十一、H.264的Slice Header解析
  9. sql和python还有c语言_Python语言之原生sql整理
  10. koa2 mysql sequelize_Vue2+Koa2+Typescript前后端框架教程--05Sequelize(ORM)的使用实现基础的班级增删...