Java12 Excel和Json文件解析
Excel文件解析:
Excel文件解析(EasyExcel框架解析)
Excel文件解析(Apache POl框架解析)
(1)Excel文件对象创建:POI
《1》创建工作簿对象:
XSSFWorkbook workbook=new XSSFWorkbook();
《2》创建工作表对象:
XSSFSheet sheet =workbook.createSheet();
《3》创建行对象:
Row row =sheet.createRow()
《4》创建单元格对象:
Cell cell=row.createCell();
(2)输出操作:workbook.write(Outputstream os)
(3)设置单元格数据格式:
《1》创建DataFormat数据格式化对象
XSSFDataFormat dt=workbook.createDataFormat()
《2》进行不同格式编写(以日期和金额格式化为例)
Short dateshort=dt.getFormat(“yyyy-MM-dd”)
Short moneyshort=dt.getFormat(“¥###,#”)
《3》创建单元格样式对象,并赋值
CellStyle datestyle=workbook.createCellstyle()
Datestyle.setDataformat(dateshort)
CellStyle moneystyle=workbook.createCellstyle()
moneystyle.setDataformat(moneyshort)
创建加粗居中等单元格样式
CellStyleheaderCellStyle=workbook.createCellStyle();
//设置单元格的水平对齐类型, 此时水平居中
headerCellStyle.setAlignment(HorizontalAlignment.CENTER);
// 设置单元格的垂直对齐类型,此时垂直靠底边
headerCellStyle.setVerticalAlignment(VerticalAlignment.BOTTOM);
// 创建并设置字体
Font font = workbook.createFont();
font.setBold(true);
font.setColor(Font.COLOR_RED);
headerCellStyle.setFont(font);
《4》设置单元格样式:cell.cellstyle(具体样式)
(2)PIO数据读入:
《1》创建输入流对象并与工作簿连接起来
《2》获取工作表:
Shee sheet=workbook.getSheet(“表名”)
Shee sheet=workbook.getSheeAt(工作表的下标)
《3》获取行信息和单元格信息:
<1> 方式1: For(Row row:sheet){
For(Cell cell :row){
System.out.println(cell)
<2> 方式2:for(int i=0;i<=sheet.getLastRowNum;i++){
Row row=sheet.getRow(i);
For(int j=0;j<row.getLastCellNum;j++){
Cell cell=row.getCell(j)
CellType celltype=cell.getCcllType();获取单元格类型,再通过不同的类型输出不同的值
Cell.getStringCellValue:获取String型单元格的值
Cell.getNumericCellValue;获取数字型单元格的值
(3)大文件的写出或读入:
《1》 使用SXSSFWork类,可设置内存中最多保留的行数
例:SXSSFWorkbook workbook=new SXSSFWorkbook workbook(100);
《2》使用EasyExcel写出操作:
EasyExcel.write(写出位置,写出类型).sheet(表名).dowrite(list数据)
《3》使用EasyExcel读取操作:
EasyExcel.read(file,head,监听器).sheet().doread();
参数解析:file ----文件路径
Head—格式类型
监听器(AnalysisEventListener)-----读取到文件后的操作(doAfterAllAnalysed)或操作逻辑(invoke)。
JSON解析
(1)简述:json是一种轻量级数据交换格式,采用完全独立与编程语言的文本格式来储存和表示数据。
(2)语法:《1》使用{}来保存对象,每个对象由若干数据组成。
《2》每个数据由key:value键值对组成
《3》数据之间用“,”分隔
《4》使用“\”对特殊字符进行转义
(3)优点: 《1》JSON只允许使用UTF-8编码,不存在编码问题;
· 《2》JSON内容仅包含key-value键值对, 格式简单,不存在冗余结构,是一种轻量级结构;
· 《3》浏览器内置JSON支持,如果把数据用 J SON发送给浏览器,可以用JavaScript直接处理;
(4)可使用Fastjson实现将javaBean对象序列化为json类型的字符串,也可将json类型的字符串反序列化为javaBean对象
(5) Fastjson的主要对象:
《1》JSON接口:提供json解析操作的入口方法,用于原始转换。
《2》JSONObject类 : 封装json格式的对象。
《3》JSONArray 类: 封装json格式的集合。
(6)相关转换方法:
《1》JSON.toJSONString(Object object)//传入一个javaBean对象(可为数组或集合),将其序列化为String类型JSON格式的字符串
《2》JSON.parseObject(String text)//将JSON格式的字符串反序列化为JSONObject类型的对象
《3》JSON.parseObject(String text,转换类型.class)//将JSON格式的字符串反序列化为要转换的类型的对象(javaBean对象)
《4》JSON.parseObject(String text,new TypeRefence<转换类型>(){})//将JSON格式的字符串反序列化为要转换的类型的对象(javaBean对象)万能公式法
《5》JSON.parseArray(String text)//将JSON格式的字符串反序列化JSONArray类型的对象(集合类)
《6》JSON.parseArray(String text,转换类型.class)//将JSON格式的字符串反序列化为要转换类型的对象(只能转成集合类)
《7》 JSON.parseObject(String text,new TypeRefence<转换类型>(){})//将JSON格式的字符串反序列化为要转换的类型的对象(javaBean对象)万能公式法(可转成集合类型或者数组类型)
(7)JSONObject类的方法:
《1》get(Object key)方法:通过key获取对应的value值,返回值为object类型对象
《2》getJSONObject( String key)方法:通过key获取对应的value值,返回值为JSONobject类型对象
《3》getJSONArray( String key)方法:通过key获取对应的value值,返回值为JSONArray类型对象
《4》getObject( String key,转换类型.class)方法:通过key获取对应类型的对象,返回值为对应的javaBean类型对象
《5》getList( String key,转换类型.class)方法:通过key获取对应类型的对象,返回值为泛型为转换类型的list集合对象
(8)JSONArray类的方法:
《1》getJSONObject(int 下标)方法:通过下标获取对应的JSONobject类型对象,返回值为JSONobject类型对象
《2》getJSONArray(int 下标 )方法:通过下标获取对应的JSOArray类型对象,返回值为JSOArray类型对象
(9)常见问题处理:
《1》FastJson默认过滤null值,不显示null值字段。若需要显示null值,可通过Feature枚举值进行设置(写在JSON.toJSONString方法中第一个参数(javaBean对象)后面)
常见枚举值如下:
Feature.WriteMapNullValue | 如果Map中包含Null值,则输出,不会过滤 |
---|---|
Feature.WriteNullListAsEmpty | 如果输出的List值为Null,则输出[ ],不会输出Null |
Feature.WriteNullStringAsEmpty | 如果输出的字符串值为Null,则输出“”,不会输出Null |
Feature.WriteNullNumberAsZero | 如果输出的数字值为Null,则输出0,不会输出Null |
Feature.UseSingleQuotes | 使用单引号 |
《2》控制JSON的字段顺序:输出结果与字段定义顺不一致。需要在定义实体类字段时,使用@JSONField注解的ordinal属性进行顺序配置。序号越小越靠前,默认ordinal=0.
《3》控制成员变量是否被序列化:如果不想某个成员变量被序列化,需要在定义实体类字段时,使用@JSONField注解的serialize选择当前成员变量是否被序列化,serialize=false时,不会序列化,反之则被序列化,默认serialize=true
《4》控制序列化出去的字段(成员变量)名称:使用@JSONField注解的name设置序列化出去的字段(成员变量)名称
《5》控制序列化出去的成员变量对应值的格式:使用@JSONField注解的format设置序列化出去的字段(成员变量)对应值的格式