rdf-file:API

组件架构

在这里插入图片描述

  • intefaces模块:主要包含用户使用接口API
  • tools模块:包含组件内核实现的文件操作工具
  • codec模块:对文件结构,行数据,字段数据进行编码解码
  • meta模块: 元数据配置以及加载
  • loader/extension模块: 对配置、插件等资源进行加载
  • resource模块:对资源层抽象,组件内部实现classpath, file, oss加载,用户可以自定义插件实现其他存储加载
  • spi模块:开放给用户的插件扩展入口
  • config模块:配置相关的资源信息

一:FileConfig

创建文件操作工具的配置对象, 这里定义的参数优先级最高

属性类型必填默认值描述
typeprotocol目前不用关注 保留属性,后续可能扩展不是根据协议解析的文件操作
filePath操作文件的路径
fileDataTypeFileDataTypeEnum.ALL文件根据协议布局模板+数据定义模板进行文件处理,协议布局模板和数据定义模板都包含head, body, tail;但是文件在分片过程中如果是body分片, 利用同样的协议布局模板+数据定义模板需要指定数据类型FileDataTypeEnum.BODY
templatePath数据定义模板路径
templateEncodingutf-8数据定义模板文件的编码;优先级:FileConfig > TemplateConfig > FileDefaultConfig
fileEncodingutf-8
lineBreak\r\n生成文件的换行符;优先级 FileConfig > TemplateConfig > FileDefaultConfig
storageConfig文件操作的存储配置
processorKeysprocessor回调指定的key
summaryEnablefalse是否开启汇总功能
createEmptyFilefalse写文件时,如果没有数据是否生成空文件
rowValidators设置行级校验器
columnSplit保留属性,先不要关注
offset文件分片操作起始位置,通过setPartial方法设置
length文件分片操作数据长度,通过setPartial方法设置
isAppendfalse写文件时,是否在文件尾追加
isInputStream, 读数据时外部构建的输入流

FileDefaultConfig

FileDefaultConfig设置的属性是组件的默认配置 。

方法默认值描述
setDefaultFileEncodingutf-8设置读取或者生成文件的编码
setDefaultTemplateEncodingutf-8设置加载的数据定义模板的编码
setDefaultLineBreak\r\n设置生成文件的换行符,读取时组件都能识别
addDefaultFleParam设置扩展属性,组件内核不会使用,会透传给自己实现的扩展插件
setCommonLog设置日志回调的实现
setRdfProcessorPathclasspath*:META-INF/rdf-file/auto-processor/设置自动执行处理器存储和根路径
setRdfProtocolPathclasspath*:META-INF/rdf-file/protocol/设置协议布局模板存储和根路径
setRdfFormatPathclasspath*:META-INF/rdf-file/format/设置字段格式化方式存储和根路径
setRdfTemplatePathclasspath:设置数据定义模板存储和根路径

二:FileFactory

FileFactory是Rdf-File组件入口,通过FileFactory创建文件处理所需的工具对象

FileFactory创建工具参数对象描述
FileReaderFileConfig创建文件读工具
FileWriterFileConfig创建文件写工具
FileMergerFileConfig创建文件合并工具
FileValidatorFileConfig创建文件校验工具
FileSorterFileConfig创建文件排序工具
FileStorageStorageConfig创建文件存储操作工具
FileSplitterStorageConfig创建文件分割工具

三:FileReader

方法描述
< T > T readHead(Class<?> requiredType)将读取的头,转换成指定类型 不能是接口
< T > T readRow(Class<?> requiredType)读取body数据并将每行数据转换成指定类型,不能是接口
String readLine()读取一行数据,不做解析转换
Summary getSummary()获取汇总字段,FileConfig.summaryEnable=false时抛异常
void close()关闭流

四:FileValidator

方法描述
ValidateResult validate()文件校验 根据文件模板校验文件格式,包括非空字段 根据文件模板配置的RowValidator校验每行数据 根据文件模板配置的汇总信息校验文件汇总信息和总笔数

五:FileSorter

5.1 接口方法

接口方法描述
SortResult sort(SortConfig sortConfig)文件排序

5.2 SortConfig参数说明

入参SortConfig配置必填描述
sortIndexes[]指定排序字段索引,若排序字段值相等整行排序,若sortIndexes没有指定,整行排序
resultPath排序临时文件存放目录地址
resultFileName结果文件名,没有设置系统生成一个
sortType排序方式,升序或降序
headLines保留字段,不要设置
executor排序使用的线程池
resultFileType返回的结果类型,SLICE_FILE_PATH: 有序的分片文件,FULL_FILE_PATH: 合成一个有序的完整文件
columnRearrangeIndex保留字段:对字段重新排序 如:{5,3,6,0,2,1}
rowFilters对行数据进行过滤判定的回调
sliceSize默认 1M
resultStorageConfig结果文件存放存储,默认NAS
sourceFilePaths多文件排序时设置,覆盖FileConfig.filePath参数

5.3 结果对象说明

结果对象值描述
String fullFilePath当ResultFileTypeEnum.FULL_FILE_PATH时整个排完序文件path
String headSlicePath分片头路径
List bodySlicePath分片体路径
String tailSlicePath分片尾路径

六:FileSplitter

文件分割器,返回结果只是标记了分片文件的范围,没有真正切分文件
文件切分保证在数据的行尾,不会在一行数据中间

方法描述
List< FileSlice> split(String path, int sliceSize)对整个文件按大小切分
FileSlice getHeadSlice(FileConfig fileConfig)获取文件头分片,分片范围内只包含文件头
FileSlice getBodySlice(FileConfig fileConfig)获取文件body分片,分片范围内只包含文件body数据
List< FileSlice> getBodySlices(FileConfig fileConfig, int sliceSize)对文件body按大小切分, 返回文件body分片列表
FileSlice getTailSlice(FileConfig fileConfig)获取文件尾分片,分片范围内只包含文件尾

七:FileMerger

MergerConfig参数设置描述
setHeadFilePaths(List headFilePaths)合并头文件列表,同存储
setHeadFilePathHolders(List headFilePaths)合并头文件列表,可以不同存储
setBodyFilePaths(List bodyFilePaths)合并body文件列表,同存储
setBodyFilePathHolders(List bodyFilePaths)合并body文件列表,可以不同存储
setTailFilePaths(List tailFilePaths)合并尾文件列表,同存储
setTailFilePathHolders(List tailFilePaths)合并尾文件列表,可以不同存储
setExistFilePaths(List existFilePaths)合并已存在完整文件列表,同存储
setExistFilePathHolders(List existFilePaths)合并已存在完整文件列表,可以不同存储
setStreamAppend(boolean streamAppend)合并的时候是否开启流合并
方法描述
void merge(MergerConfig config)文件合并

八:FileWriter

方法描述
void writeHead(Object headBean)写入头部信息, 传入一个javabean对象或者map
void writeRow(Object rowBean)写入一行记录, 传入一个javabean对象或者map
void writeTail(Object tailBean)写入尾部信息, 传入一个javabean对象或者map
void writeLine(String line)直接写入一行字符串
Summary geSummary()获取写入的汇总信息
void close()关闭流

九:FileStorage

方法描述
void createNewFile(String filePath)创建一个空文件,不能创建文件夹,如果创建文件前文件已存在则覆盖原文件
FileInfo getFileInfo(String filePath)获取文件信息:是否存在、文件大小、最后修改时间,metadata,userMetadata 特定存储返回一些特殊信息如oss的md5等
List< String> listFiles(String folderName, String[] regexs)只查询当前文件夹下的文件和文件夹全路径,regexs 正则式可以过滤
List< String> listFiles(String folderName, FilePathFilter… fileFilters)只查询当前文件夹下的文件和文件夹全路径, fileFilters过滤器过滤
List< String> listAllFiles(String folderName, String[] regexs)只查询文件夹子文件夹中的所有文件 (不包括文件夹),regexs 正则式可以过滤
List< String> listAllFiles(String folderName, FilePathFilter… fileFilters)只查询文件夹子文件夹中的所有文件 (不包括文件夹),fileFilters过滤器过滤
void download(String srcFile, String toFile)1. 下载 文件srcFile=oss/yeb/test/aa.txt, toFile=/sharedata/test/bb/aa.txt 2. 下载文件夹 srcFile=oss/yeb/test/, toFile=/sharedata/kkk/, 将oss/yeb/test/下目录包括子目录下文件下载到/sharedata/kkk/目录下
void upload(String srcFile, String toFile, boolean override)1.上传文件 2.文件夹上传, 将原文件夹下所有文件及子文件上传到目标目录3.override 指定是否覆盖已有文件
void rename(String srcFile, String toFile)文件重名:如果要重命名文件夹,目标文件夹不能是原始文件夹的子目录,如果目标文件已存在,则覆盖目标文件
void copy(String srcFile, String toFile)文件拷贝: 如果是oss存储,只能支持同账号下拷贝
void delete(String fullPath)可以删除文件或文件夹

StorageConfig

属性描述
storageTypenas/oss指定存储类型组件实现了nas/oss, 业务可扩展
paramMap<String, Object>组件给插件透传一些值, 如oss存储实现需要提供账号信息,nas存储只需要指定类型即可

Oss扩展配置

oss存储插件的实现,需要指定oss相关配置信息
param通过指定key透传

StorageConfig storageConfig = new StorageConfig(FileOssStorageContants.STORAGE_OSS);
storageConfig.addParam(OssConfig.OSS_STORAGE_CONFIG_KEY, ossConfig);

ossConfig 参数列表

参数key必填描述
bucketNameoss 命令空间
endpointoss 访问地址
accessKeyIdoss 访问key
accessKeySecretoss 访问密钥
ossTempRoot写文件时OSS本地文件根目录 写文件时会先写在本地再上传到OSS OSS本地目录为:tempRoot + OSS路径,默认值是:/home/admin/logs/ossLocal/
ossBigFileSizeoss大文件上传采用并发上传,默认大文件size是1G
ossAppendSizeLimit追加上传的次数没有限制,文件大小有限制,默认上限为5GB

TemplateLoader

{
  "head":[
    "totalCount|总笔数|Required|Long",
    "totalAmount|总金额|BigDecimal|Required"
  ],
  "body":[
    "seq|流水号",
    "instSeq|基金公司订单号|Required",
    "gmtApply|订单申请时间|Date:yyyy-MM-dd HH:mm:ss",
    "date|普通日期|Date:yyyyMMdd",
    "dateTime|普通日期时间|Date:yyyyMMdd HH:mm:ss",
    "applyNumber|普通数字|BigDecimal",
    "amount|金额|BigDecimal",
    "age|年龄|Integer",
    "longN|长整型|Long",
    "bol|布尔值|Boolean",
    "memo|备注"
  ],
  "tail": [
    "fileEnd|数据文件尾部字符",
    "date|普通日期|Date:yyyyMMdd",
    "amount|金额|BigDecimal"
  ],
  "protocol":"DE",
  // 自定义参数
  "params": {
    "sliceSize": 256,
    "sliceField": "date"
  }
}
方法描述
FileMeta load(FileConfig fileConfig)返回模板文件,可以获取模板中的所有属性和自定义参数
FileMeta load(String templatePath, String templateEncoding)返回模板文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/193374.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux uname命令教程:如何打印linux操作系统名称和硬件的基本信息(附实例教程和注意事项)

Linux uname命令介绍 uname命令是一个在Linux中常用的命令行工具&#xff0c;用于打印有关操作系统名称和系统硬件的基本信息。uname这个名字来源于"UNIX name"。它最常用于确定处理器架构&#xff0c;系统主机名和系统上运行的内核版本。 Linux uname命令适用的Li…

Linux网络——数据链路层

目录 一.认识以太网 二.以太网帧格式 三.认识MAC地址 四.认识MTU 五.以太局域网的通信原理 六.其他重要协议 1.DNS协议 2.域名简介 3.ICMP协议 4.NAT技术 5.NAT技术的缺陷 6.NAT和代理服务器 一.认识以太网 "以太网" 不是一种具体的网络, 而是一种技术标…

必应的下一个十年:穿越创新的奇点时刻

2023年是微软搜索引擎必应进入中国市场十周年&#xff0c;2024年也将迎来必应上市十五周年。对于风起云涌的互联网公司来说&#xff0c;十年到十五年是一个相当长的创新周期。而在2023年初&#xff0c;以GPT为代表的大语言模型横扫全球科技产业&#xff0c;也对互联网和云计算带…

Docker | Docker部署MySQL

Docker | Docker部署MySQL ✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;Docker系列…

Excel如何比较两列数据的不同

当遇到exel有两个列表的数据&#xff0c;需要比较得到他们的不同的部分&#xff0c;并且得到一个不同的值的列表。示例如下&#xff1a; 目的是&#xff1a;通过比较&#xff0c;知道Column2的哪些值不在在Column1里。 WPS直接提供了这一个功能&#xff0c;如下图&#xff1a;…

Ubuntu18.04安装Ipopt-3.12.8流程

本文主要介绍在Ubuntu18.04中安装Ipopt库的流程&#xff0c;及过程报错的解决方法&#xff0c;已经有很多关于Ipopt安装的博客&#xff0c;但经过我的测试&#xff0c;很多都失效了&#xff0c;经过探索&#xff0c;找到可流畅的安装Ipopt的方法&#xff0c;总结成本篇博客。 …

【备忘录】软件记录

Anaconda 虚拟环境 创建Python环境 Spyder Python程序编辑 Jupyter Notebook 交互式开发环境

java--单继承、Object

java是单继承的&#xff0c;java中的类不支持多继承&#xff0c;但是支持多层继承。 反证法&#xff1a; 如果一个类同时继承两个类&#xff0c;然后两个类中都有同样的一个方法&#xff0c;哪当我创建这个类里的方法&#xff0c;是调用哪父类的方法 所以java中的类不支持多继…

51单片机的智能窗帘系统【含proteus仿真+程序+报告+原理图】

1、主要功能 该系统由AT89C51单片机LCD1602显示模块DS18B20温度模块DS1302时间模块光敏传感器步进电机蓝牙等模块构成。适用于智能窗帘、智能门窗家具等相似项目。 可实现基本功能: 版本一&#xff1a; 1、LCD1602实时显示北京时间、环境温度、光照强度、手动/自动控制等信息…

SPSS多维尺度分析

前言&#xff1a; 本专栏参考教材为《SPSS22.0从入门到精通》&#xff0c;由于软件版本原因&#xff0c;部分内容有所改变&#xff0c;为适应软件版本的变化&#xff0c;特此创作此专栏便于大家学习。本专栏使用软件为&#xff1a;SPSS25.0 本专栏所有的数据文件请点击此链接下…

window上64位和32位的区别

在电脑上安装系统和软件的时候&#xff0c;经常会出现32位系统和64系统的选项&#xff0c;那么Windows64位系统和32位系统的区别具体在哪里&#xff0c;很多人都是比较模糊&#xff08;比如说我....&#xff09;的&#xff0c;那么今天小黑就来详细的科普下这两个系统究竟有什么…

springboot实现数据脱敏

springboot实现数据脱敏 怎么说呢&#xff0c;写着写着发觉 ”这写的什么玩意“ 。 总的来说就是&#xff0c;这篇文章并不能解决数据脱敏问题&#xff0c;但以下链接可以。 SpringBoot中利用自定义注解优雅地实现隐私数据脱敏 然后回到本文&#xff0c;本来是想基于AOP代理&am…

【Java Spring】SpringBoot Bean详解

文章目录 1、Bean方法注解简介2、Bean注解重命名3、对象装配&#xff08;获取Bean对象&#xff09;3.1 对象装配之属性注入3.2 对象装配之Set 注入3.3 对象装配之构造方法注入 4、Resource VS Autowired5、Bean对象的作用域5.1 验证Bean对象的默认作用域5.2 Bean对象的六大作用…

openGauss学习笔记-132 openGauss 数据库运维-查看openGauss状态

文章目录 openGauss学习笔记-132 openGauss 数据库运维-查看openGauss状态132.1 背景信息132.2 前提条件132.3 操作步骤132.4 参数说明132.5 示例 openGauss学习笔记-132 openGauss 数据库运维-查看openGauss状态 132.1 背景信息 openGauss支持查看整个openGauss的状态&#…

自动驾驶学习笔记(十一)——高精地图

#Apollo开发者# 学习课程的传送门如下&#xff0c;当您也准备学习自动驾驶时&#xff0c;可以和我一同前往&#xff1a; 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo Beta宣讲和线下沙龙》免费报名—>传送门 文章目录 前言 高精地图 地图采集 底图制作 地图…

FLASK博客系列4——再谈路由

最近好像拖更有点久了。抱歉抱歉~ 今天我们继续来聊聊路由&#xff08;其实就是我上次偷懒剩下一点没讲完&#xff09;。 通过上次的文章&#xff0c;我们基本了解了Flask中的路由&#xff0c;是不是比较简单呢&#xff1f;别急&#xff0c;今天来点猛料。 一、路由之HTTP方法绑…

1233:单词倒置(C语言)

题目描述 最近birdfly收到了女友的几份信件&#xff0c;为了只要他俩知道信件的秘密&#xff0c;女友把信件里的每个单词都倒置了。这样只有birdfly将它们倒置过来才能明白女友的心思了。为此birdfly还特意请你编写程序帮他解决一下这个问题。 简单起见假定每封信只包含英文单词…

B 树和 B+树 的区别

文章目录 B 树和 B树 的区别 B 树和 B树 的区别 了解二叉树、AVL 树、B 树的概念 B 树和 B树的应用场景 B 树是一种多路平衡查找树&#xff0c;为了更形象的理解。 二叉树&#xff0c;每个节点支持两个分支的树结构&#xff0c;相比于单向链表&#xff0c;多了一个分支。 …

Android aidl的简单使用

一.服务端 1.创建aidl文件&#xff0c;然后记得build下生成java文件 package com.example.aidlservice31;// Declare any non-default types here with import statementsinterface IMyAidlServer {// 接收一个字符串参数void setData(String value);// 返回一个字符串String …

地理坐标系转换

1.EPSG代码 搜索地理坐标系对应的EPSG代码 https://epsg.io/ 常用的地理坐标系EPSG代码&#xff1a; 2. 坐标系转换 转换网址&#xff1a; https://epsg.io/transform &#xff08;1&#xff09;修改 input coordinate system 和 output coordinate system&#xff0c; 可以…
最新文章