java - 如何附加到 CSV 文件中的特定行
问题描述
我有以下从 CSV 文件中读取的数据:
Class Total Step Run1 Run2 Run3 Run4
Timer 15 2 10.5 3.6 5.5 8
稍后,将添加具有可变运行大小的其他类。例如,Optimiser
将添加具有 6 次运行的类,并且 CSV 将如下所示:
Class Total Step Run1 Run2 Run3 Run4
Timer 15 2 10.5 3.6 5.5 8
Optimiser 26 6 6 10 5 1.5 16 9
如您所见,标题缺少Run5
and Run6
。
我的问题是如何更新标题以包含新的列名?请注意,稍后可能会添加其他类,运行次数超过 6。
我编写的要写入 CSV 的代码是:
try {
BufferedWriter out = new BufferedWriter(new FileWriter(f, true));
if (f.length() == 0L) {
out.write("Class");
out.write(",");
out.write("Total");
out.write(",");
out.write("Step");
out.write(",");
for (int i = 1; i <= numRuns; i++) {
out.write(String.valueOf(i));
out.write(",");
}
out.write("\n");
}
for (int i = 0; i < classes.size(); i++) {
out.write(classes.get(i));
out.write(",");
out.write(totals.get(i));
out.write(",");
out.write(steps.get(i));
out.write(",");
List<Double> runs = this.getRuns(classes.get(i));
for (double x: runs) {
out.write(String.valueOf(x));
out.write(",");
}
out.write("\n");
}
out.close();
} catch (IOException e) {
e.printStackTrace();
}
解决方案
在开始编写步骤之前,您应该知道任何行中的最大运行次数,您可以通过
int numRuns = 0
for (int i=0; i<classes.size(); i++) {
int rowSize = this.getRuns(classes.get(i));
if (rowSize > numRows) {
numRuns = rowSize;
}
}