我知道有关于这个问题的几个主题,但我认为我的问题因为大小而有点不同。
在我的示例中,我想将1,700万行写入文本文件。在最坏的情况下,可能会有更多。这些行是为sql加载器创建的,用于将快速数据加载到表中,因此文件可能非常大,因为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();
对于我的1,700万行,我需要大约20分钟。我可以用任何我不知道的方法更快地处理它吗?
FileChannel:
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();