一:组件架构

rdf-file:API_List

  • 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

7.1 接口方法

接口方法

描述

SortResult sort(SortConfig sortConfig)

文件排序

7.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参数

7.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


十二:TemplateLoader

数据定义模板也可以放一些和业务相关的自定义参数。可以通过 fileMeta.getParams() 获取自定义参数。

{
  "head":[
    ...
  ],
  "body":[
    ...
  ],
  "tail": [
    ...
  ],
  "protocol":"DE",
  // 自定义参数
  "params": {
    "sliceSize": 256,
    "sliceField": "date",
    // 有些系统会先给一个.txt文件然后再给一个.ok文件,当拿到.ok文件时表示.txt文件已经都写好了
    "okFile": true
  }
}

方法

描述

FileMeta load(FileConfig fileConfig)

返回模板文件,可以获取模板中的所有属性和自定义参数

FileMeta load(String templatePath, String templateEncoding)

返回模板文件