按列

时间:2016-07-25 09:48:00

标签: java file-writing

我需要生成表数据并将其写入文件。 输出文件应如下所示:

123|aaaa|bbba|
124|aaab|bbbb|
125|aaac|bbbc|

通过生成单行很容易,比如 123 | aaaa | bbba | \ n 并编写它,但我需要生成一个列< / strong>因为生成器有性能问题,请编写它,然后生成另一个。

在for循环中,我需要写入类似的文件:

123|
124|
125|

然后:

123|aaaa|
124|aaab|
125|aaac|

最后:

123|aaaa|bbba|
124|aaab|bbbb|
125|aaac|bbbc|

我目前的代码如下:

os = new BufferedOutputStream(new FileOutputStream(filename));
StringBuffer column = new StringBuffer();
for (int i = 0; i < numberofcolumns; i++) {
    for (int j = 0; j < width; j++) {
        column.append(columns[i].genValue());
        column.append("|\n");
    }
    os.write(column.toString().getBytes(), 0, entry.length());
}

2 个答案:

答案 0 :(得分:1)

为什么要立即将其写入文件并每次重新打开? 如何在内部保存并在生成所有数据后将其写入文件?

您可以声明一个三维数组并将数据写入其中。 完成此操作后,将数组写入文件。应该容易得多。

答案 1 :(得分:0)

这看起来确实不错,但可以通过paste

来实现
$ echo """a
> b
> c
> d""" > testFile

$ echo """1
> 2
> 3
> 4""" | paste -d"|" testFile - > modifiedFile

$ cat modifiedFile
a|1
b|2
c|3
d|4

为什么它看起来像个坏主意:

  • 虽然您的生成器可能很慢,但我怀疑要输出的列数是节流:它最有可能是数据检索/过滤等等会降低操作速度。
  • 您能确定每列的数据会以相同的顺序返回吗?
  • 每次获得新列时重写文件都非常慢。难道你不能将每列中的数据存储在内存中(即bash数组?)并在完成后写入文件?