rdf-file:API

组件架构

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

一:FileConfig

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

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

FileDefaultConfig

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

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

二:FileFactory

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

FileFactory创建工具 参数对象 描述
FileReader FileConfig 创建文件读工具
FileWriter FileConfig 创建文件写工具
FileMerger FileConfig 创建文件合并工具
FileValidator FileConfig 创建文件校验工具
FileSorter FileConfig 创建文件排序工具
FileStorage StorageConfig 创建文件存储操作工具
FileSplitter StorageConfig 创建文件分割工具

三: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

属性 描述
storageType nas/oss 指定存储类型组件实现了nas/oss, 业务可扩展
param Map<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 必填 描述
bucketName oss 命令空间
endpoint oss 访问地址
accessKeyId oss 访问key
accessKeySecret oss 访问密钥
ossTempRoot 写文件时OSS本地文件根目录 写文件时会先写在本地再上传到OSS OSS本地目录为:tempRoot + OSS路径,默认值是:/home/admin/logs/ossLocal/
ossBigFileSize oss大文件上传采用并发上传,默认大文件size是1G
ossAppendSizeLimit 追加上传的次数没有限制,文件大小有限制,默认上限为5GB