客户正在向我发送我需要附加到带有标题的CSV文件的键值对列表。
lang=java lang, version, maven
version=1.8 -----> java, 1.8, true
maven=true
,另一个输入可能是:
lang=C# lang, version, maven
version=7.2 -----> java, 1.8, true
maven=false C#, 7.2, false
列表的数量可能是几百万,所以我需要将数据刷新到磁盘,并且无法将其全部保存在内存中。
由于密钥列表由客户端确定,我使用他的第一个输入来确定CSV文件的标题:
org.apache.commons.csv.CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT.withHeader(x, y, z ...)));
从那时起只附加相关列的值:
csvPrinter.printRecord(xValue, yValue, zValue.....)
但是,它是一个顽皮的客户端,有时候他发送的是我以前从未见过的新密钥:
lang=java
meetMeAt=London
version=1.4
maven=false
此时,我如何向CSV添加另一个标题?
首先将所有列表保存到csv文件不带标题,如何累积程序存储器中的所有标题,然后创建包含所有标题的另一个文件并将第一个文件复制到其中文件?这是合理的吗?
答案 0 :(得分:0)
您提出的解决方案存在我们需要解决的问题:
lang=java java, 1.8, true
version=1.8 ----->
maven=true
lang=java java, 1.8, true
version=1.8 -----> ???
gradle=true
您想如何表示?添加另一列?当您不知道列标题时,您如何知道需要添加其他列?
如果您能够两次读取输入,我建议您在第一次读取时收集标题,然后使用已知的列标题和位置重新读取。
如果您只需要阅读一次输入,您的想法就可以这样工作: