0

我知道关于这个问题有几个线程,但我认为我的问题由于大小而有点不同。

在我的示例中,我想将 170 万行写入文本文件。在最坏的情况下,可能会更多。这些行是为 sql loader 创建的,用于将快速数据加载到表中,因此文件可能非常大,因为 sql loader 可以处理它。

现在我想尽可能快地编写大文件。这是我的实际方法:

BufferedWriter bw = new BufferedWriter(new FileWriter("out.txt"),40000);
int u=profils.size()-1;
for(int z=0; z<u;z++){
  for(int b=0;b<z;b++){
    p = getValue();
    if(!Double.isNaN(p) & p > 0.55){
      bw.write(map.get(z) + ";" + map.get(b) + ";" + p + "\n");
    }
  }
}
bw.close();

对于我的 170 万行,我需要大约 20 分钟。我可以用我不知道的任何方法更快地处理它吗?

文件频道:

File out = new File("out.txt");
FileOutputStream fileOutputStream = new FileOutputStream(out, true);
FileChannel fileChannel = fileOutputStream.getChannel();
ByteBuffer byteBuffer = null;

int u=profils.size()-1;
for(int z=0; z<u;z++){
  for(int b=0;b<z;b++){
   p = getValue();
     if(!Double.isNaN(p) & p > 0.55){
        String str = indexToSubstID.get(z) + ";" + indexToSubstID.get(b) + ";" + p + "\n";
        byteBuffer = ByteBuffer.wrap(str.getBytes(Charset.forName("ISO-8859-1")));
        fileChannel.write(byteBuffer);
      }
   }
 }
fileOutputStream.close();
4

1 回答 1

2

FileChannel 是您的必经之路。它用于大量写入。在此处阅读 api 文档

于 2013-04-19T18:41:11.623 回答