rdf-file:读写示例

<dependency><groupId>com.alipay.rdf.file</groupId><artifactId>rdf-file-core</artifactId><version>2.2.10</version>
</dependency>

一:读

一:写

写文件之正常写

协议布局模板

使用内置的布局文件: rdf-file-core-2.2.10.jar!/META-INF/rdf-file/protocol/fund.xml

数据定义模板

{"head":["identity|信息标识|[8,0]|default:OFDCFDAT","version|协议版本号|[4,0]|default:20","msgCreator|信息创建人|[9,0]|default:H0","msgRecipient|信息接收人|[9,0]","sendDate|传送发生日期|[8,0]|Date:yyyyMMdd","summaryTableNo|汇总表号|[3,0]","fileTypeCode|文件类型代码 |[2,0]","sender|发送人|[8,0]|default:H0","recipient|接收人|[8,0]"],"body":["TransactionCfmDate|对帐日期|[8,0]|Date:yyyyMMdd","FundCode|基金代码|[8,0]","AvailableVol|基金可用份数|Integer|[6,2]"],"tail":["fileEnd|数据文件尾部字符|default:OFDCFEND|[8,0]"],"protocol":"FUND"
}

示例程序

String filePath = new File("/Users/mengday/Temp", "demofund.txt").getAbsolutePath();
FileConfig fileConfig = new FileConfig(filePath, "templates/demofund.json", new StorageConfig("nas"));
FileWriter fileWriter = FileFactory.createWriter(fileConfig);
try {//构建文件头Map<String, Object> head = new HashMap<>();head.put("msgRecipient", "xxx");head.put("sendDate", "20231122");head.put("summaryTableNo", "aa");head.put("fileTypeCode", "bb");head.put("recipient", "ll");head.put("totalCount", 1);fileWriter.writeHead(head);// 文件数据内容Map<String, Object> row = new HashMap<>();row.put("TransactionCfmDate", "20231122");row.put("FundCode", "中国1");row.put("AvailableVol", 42.11);fileWriter.writeRow(row);// 文件尾,没有数据,是取了数据定义模板中默认值fileWriter.writeTail(new HashMap<String, Object>());
} catch (Exception e) {e.printStackTrace();
} finally {fileWriter.close();
}

生成文件

OFDCFDAT
20  
H0       
xxx      
20231122
aa 
bb
H0      
ll      
003
TransactionCfmDate
FundCode
AvailableVol
00000001
20231122中国1 004211
OFDCFEND

写文件之汇总写

协议布局模板

rdf-file-core-2.2.10.jar!/META-INF/rdf-file/protocol/sp.xml

数据定义模板

tail:定义字段,summaryColumnPairs:定义对什么字段进行汇总,汇总的值赋给tail的什么字段上。"totalAmount|amount"表示对totalAmount=sum(amount),totalCount是系统预定义好的总条数。

{"head": ["fileStart|数据文件头部字符|default:汇总文件测试"],"body": ["seq|流水号","instSeq|基金公司订单号|Required","gmtApply|订单申请时间|Date:yyyy-MM-dd HH:mm:ss","date|普通日期|Date:yyyyMMdd","dateTime|普通日期时间|Date:yyyyMMdd HH:mm:ss","applyNumber|普通数字|Long","amount|金额|BigDecimal","age|年龄|Integer","longN|长整型|Long","bol|布尔值|Boolean","memo|备注"],"tail": ["totalCount|总笔数|Required|Integer","totalAmount|总金额|BigDecimal|Required"],"protocol": "SP","lineBreak": "\r\n","summaryColumnPairs": ["totalAmount|amount"]
}

示例程序

String filePath = new File("/Users/mengday/Temp", "demosp.txt").getAbsolutePath();
FileConfig fileConfig = new FileConfig(filePath, "templates/demosp.json", new StorageConfig("nas"));
// 开启汇总写
fileConfig.setSummaryEnable(true);
FileWriter fileWriter = FileFactory.createWriter(fileConfig);
try {Date testDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2017-01-03 12:22:33");// 头使用数据定义模板的常量Map<String, Object> head = new HashMap<String, Object>();fileWriter.writeHead(head);// 写入两条数据Map<String, Object> body = new HashMap<String, Object>();body.put("seq", "seq12345");body.put("instSeq", "303");body.put("gmtApply", testDate);body.put("date", testDate);body.put("dateTime", testDate);body.put("applyNumber", 12);body.put("amount", new BigDecimal("1.22"));body.put("age", new Integer(33));body.put("longN", new Long(33));body.put("bol", true);body.put("memo", "memo1");fileWriter.writeRow(body);testDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2016-02-03 12:22:33");body.put("seq", "seq234567");body.put("instSeq", "505");body.put("gmtApply", testDate);body.put("date", testDate);body.put("dateTime", testDate);body.put("applyNumber", 12);body.put("amount", new BigDecimal("1.09"));body.put("age", 66);body.put("longN", 125);body.put("bol", false);body.put("memo", "memo2");fileWriter.writeRow(body);// 根据汇总信息写入尾部fileWriter.writeTail(fileWriter.getSummary().summaryTailToMap());
} catch (Exception e) {e.printStackTrace();
} finally {fileWriter.close();
}

生成文件

汇总文件测试
seq12345|303|2017-01-03 12:22:33|20170103|20170103 12:22:33|12|1.22|33|33|true|memo1
seq234567|505|2016-02-03 12:22:33|20160203|20160203 12:22:33|12|1.09|66|125|false|memo2
2|2.31

文件合并

文件合并使用场景,一般在分布式环境下导出文件,如分库分表下每个表导出一个分片文件,最后合成一个完整文件。
文件合并支持: 文件头, 文件body,文件尾,完整文件, 不同存储文件的合并。

{"head": ["totalCount|总笔数|Required|Integer","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","summaryColumnPairs": ["totalAmount|amount","amount|amount"]
}

文件内容

de_all1.txt

总笔数:100|总金额:300.03
流水号|基金公司订单号|订单申请时间|普通日期|普通日期时间|普通数字|金额|年龄|长整型|布尔值|备注
seq_0|inst_seq_0|2013-11-09 12:34:56|20131109|20131112 12:23:34|23.33|10.22|22|12345|true|备注1
seq_1|inst_seq_1|2013-11-10 15:56:12|20131110|20131113 12:33:34|23.34|11.88|33|56789|false|
OFDCFEND|20131109|100

de_all2.txt

总笔数:100|总金额:300.11
流水号|基金公司订单号|订单申请时间|普通日期|普通日期时间|普通数字|金额|年龄|长整型|布尔值|备注
seq_2|inst_seq_0|2013-11-09 12:34:56|20131109|20131112 12:23:34|23.33|10.22|22|12345|true|备注1
seq_3|inst_seq_1|2013-11-10 15:56:12|20131110|20131113 12:33:34|23.34|11.88|33|56789|false|
OFDCFEND|20131109|12

de_all3.txt

总笔数:100|总金额:300.12
流水号|基金公司订单号|订单申请时间|普通日期|普通日期时间|普通数字|金额|年龄|长整型|布尔值|备注
seq_10|inst_seq_0|2013-11-09 12:34:56|20131109|20131112 12:23:34|23.33|10.22|22|12345|true|备注1
seq_11|inst_seq_1|2013-11-10 15:56:12|20131110|20131113 12:33:34|23.34|11.88|33|56789|false|
OFDCFEND|20131109|211

示例程序

String path = new ClassPathResource("data").getFile().getPath();
String filePath = new File(path, "de_all_merge.txt").getAbsolutePath();
FileConfig config = new FileConfig(filePath, "templates/template8.json", new StorageConfig("nas"));List<String> existFilePaths = Arrays.asList(new ClassPathResource("data/de_all1.txt").getFile().getPath(),new ClassPathResource("data/de_all2.txt").getFile().getPath(),new ClassPathResource("data/de_all3.txt").getFile().getPath()
);
MergerConfig mergerConfig = new MergerConfig();
mergerConfig.setExistFilePaths(existFilePaths);FileMerger fileMerger = FileFactory.createMerger(config);
fileMerger.merge(mergerConfig);

生成文件

  • 总笔试累加
  • 总金额累加
  • 数据体合并
  • 汇总累加
总笔数:300|总金额:900.26
流水号|基金公司订单号|订单申请时间|普通日期|普通日期时间|普通数字|金额|年龄|长整型|布尔值|备注
seq_0|inst_seq_0|2013-11-09 12:34:56|20131109|20131112 12:23:34|23.33|10.22|22|12345|true|备注1
seq_1|inst_seq_1|2013-11-10 15:56:12|20131110|20131113 12:33:34|23.34|11.88|33|56789|false|
seq_2|inst_seq_0|2013-11-09 12:34:56|20131109|20131112 12:23:34|23.33|10.22|22|12345|true|备注1
seq_3|inst_seq_1|2013-11-10 15:56:12|20131110|20131113 12:33:34|23.34|11.88|33|56789|false|
seq_10|inst_seq_0|2013-11-09 12:34:56|20131109|20131112 12:23:34|23.33|10.22|22|12345|true|备注1
seq_11|inst_seq_1|2013-11-10 15:56:12|20131110|20131113 12:33:34|23.34|11.88|33|56789|false|
OFDCFEND|20131109|323

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于一个类中引用两外一个类中的变量和方法,一个技巧可以提高开发效率

import static com.xx.xx.util.ext.xx.toJson; import static com.xx.xx.util.ext.smf.Cert.certMgrClient; 第一个引用一个方法&#xff0c;第二个引用一个变量&#xff0c; 引用后就可以直接通过变量名或者方法名就行使用&#xff0c;很方便&#xff0c;不要通过class.方式调…

maven中scope和optional区别

文章目录 1. Scope&#xff08;作用范围&#xff09;&#xff1a;2. Optional&#xff08;可选项&#xff09;&#xff1a; 1. Scope&#xff08;作用范围&#xff09;&#xff1a; Maven的<scope>元素用于指定依赖项的作用范围&#xff0c;即依赖项在构建和运行时的可见…

【人工智能】它正在悄悄改变我的学习与生活,并试图改变我的全部!

前言 人工智能对我们的生活影响有多大&#xff1f;作为一名计算机研一的学生&#xff0c;一开学&#xff0c;学习使用ChatGTP便是我的第一个堂课。&#xff08;主要用于做作业&#x1f602;&#xff09; 我的本科毕业论文是在计算机视觉&#xff08;CV&#xff09;方向进行的…

bmp文件操作和详解

一 BMP文件格式 BMP&#xff08;Bitmap&#xff09;是Windows操作系统中的标准图像文件格式。 由于windows操作系统的发布时机远早于Linux、Android、IOS等操作系统&#xff0c;因此windows中很多数据格式和算法的标准也是当今所有操作系统必须要兼容的标准数据结构和算法。BM…

ubuntu下载vscode并运行程序

如有帮助点赞收藏关注&#xff01; 如需转载&#xff0c;请注明出处&#xff01; 好久没有在linux下编译c代码了&#xff0c;由于换了酷炫彩灯的电脑。又要重新安装一次喽。做个记录&#xff0c;可以帮助到有需要的人&#xff0c;接下来不要错过每一个步骤。 我们一起手把手运行…

虹科方案 | 如何破解CAN与车载以太网之间数据传输和协议转换的难题?

导读&#xff1a;在车辆网络时代&#xff0c;数据传输和协议转换在通信领域中扮演着至关重要的角色。它们不仅能够实现车辆内部系统之间的互联互通&#xff0c;还支持车辆与外部网络进行通信&#xff0c;从而为驾驶者带来更智能、便捷的驾驶体验。本文将介绍CAN总线与车载以太网…

3.数据结构

3.1 数据结构分类 常见的数据结构包括数组、链表、栈、队列、哈希表、树、堆、图&#xff0c;它们可以从“逻辑结构”和“物理结构”两个维度进行分类。 3.1.1逻辑结构&#xff1a;线性与非线性 逻辑结构揭示了数据元素之间的逻辑关系。在数组和链表中&#xff0c;数据按照…

大公司为什么喜欢centos系统写爬虫?

CentOS是一个基于Red Hat Enterprise Linux&#xff08;RHEL&#xff09;源代码构建的开源操作系统&#xff0c;它受到大企业喜欢大多数因为他系统的稳定性&#xff0c;安全性以及兼容性等。可以为企业提供更多的商业支持。以我个人为例&#xff0c;公司在做爬虫数据抓取多是采…

element-ui 中 el-select 组件选择后不会自动关闭

在使用 el-select 组件时&#xff0c;打开 select 选择框后选择或点击其他元素后不会自动关闭 el-select 框的问题。 我们只需要将在操作后手动让 el-select 失去焦点即可收起下拉框。 <el-select v-model"value1" ref"selectRef" multiple placehold…

位操作/位运算

常用操作一&#xff1a; n 的二进制表示中第 k 位&#xff08;从0位开始算&#xff09;是几 基本思路 先把 n 第 k 位数字移到最后一位&#xff0c;用右移运算 n>>k看个位数字是几&#xff0c;其实就是 x & 1 实际就是&#xff1a;n>>k&1 //最低为从0…

学位论文撰写-经验

记录个人在撰写学位论文过程中遇到的一些问题. 论文敲完Latex后&#xff0c;即初稿完成后&#xff0c;要打印一版出来 &#xff0c;看一下每个章节开头是否放在了奇数页&#xff0c;因此&#xff0c;把文章打印出来看&#xff0c;会方便一些。写完初稿之后&#xff0c;请同学帮…

王者小游戏作业

一、创建好文件、包、类、插入图片文件夹 二、beast包 1、Bear类 package beast; import sxt.GameFrame; public class Bear extends Beast {public Bear(int x, int y, GameFrame gameFrame) {super(x, y, gameFrame);setImg("C:\\Users\\陆先生\\Desktop\\王者荣耀图片…

前置任务之安装jdk

已经安装过很多次了&#xff0c;但是每次安装都要搜好几次才能找到正确的&#xff0c;离大谱。 1.打开 oracle官网 https://www.oracle.com 然后切换到Java archive 下载192版本的&#xff0c;页面搜索ctrlF&#xff0c;【Java SE Development Kit】或者【jdk-8u192-windows-…

深入理解Transformer,兼谈MHSA(多头自注意力)、LayerNorm、FFN、位置编码

Attention Is All You Need——集中一下注意力 Transformer其实不是完全的Self-Attention结构&#xff0c;还带有残差连接、LayerNorm、类似1维卷积的Position-wise Feed-Forward Networks&#xff08;FFN&#xff09;、MLP和Positional Encoding&#xff08;位置编码&#xf…

ChatGPT进阶:提示工程的神秘面纱与实战指南

文章目录 一、提示工程的概念与原理二、提示工程的实践方法三、提示工程的挑战与展望四、实战案例分析总结《ChatGPT进阶&#xff1a;提示工程入门》内容简介作者简介陈颢鹏&#xff1a;李子菡&#xff1a; 目录获取方式 在人工智能领域&#xff0c;对话系统已经成为了一个热门…

C#工程中Form_xx.cs不能在设计器中查看

环境&#xff1a;VS2022 直接上图&#xff1a; 原因&#xff1a; 写了个类在Form_xx.cs中从For继承的部分类之前&#xff0c;移动到之后&#xff0c;保证窗体类是代码中的首个类即可&#xff0c;如图&#xff1a;

实战|信息泄露

0x01系统初探 通过fofa对大学进行搜索 fofa:host"edu.cn" &amp;&amp; status_code"200"在随意的翻阅查看时&#xff0c;发现访问xxx.edu.cn登录页面会优先访问登录后的页面&#xff0c;再跳转至登录页面。盲猜应该是前端校验&#xff0c;可以通过…

基于C#实现奇偶排序

这篇就从简单一点的一个“奇偶排序”说起吧&#xff0c;不过这个排序还是蛮有意思的&#xff0c;严格来说复杂度是 O(N2)&#xff0c;不过在多核的情况下&#xff0c;可以做到 N2 /(m/2)的效率&#xff0c;这里的 m 就是待排序的个数&#xff0c;当 m100&#xff0c;复杂度为 N…

zlmediakit实现rtsp流服务器

本次实现是将内存中的H264数据经过zlmediakit实现为rtsp流。 我是用的是CAPI的方式&#xff0c;将zlmediakit作为一个sdk嵌入到自己的程序中而不是作为一个独立的进进程服务。 1.编译完成zkmedialit后会得到bin include lib三个文件夹如图 其中bin中的MediaServer是作为独立的…

凸包问题的GRAHAM-SCAN解法 open3d c++ 代码

使用了Open3D库进行点云处理和可视化。下面是代码的大致解释: 引入必要的头文件和命名空间: 定义了三个函数: ComputeTriangleDirArea:计算带符号三角形的面积。Compute2Ddistance:计算两点之间的平面距离。GetConvexHullByGrahamScan:通过Graham Scan方法计算凸包点集。…