组件架构
- 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 |