java - 将字符串写入大文件

标签 java io

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

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

现在我想尽快写入大文件。这是我的实际方法:

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 分钟。我可以用任何我不知道的方法更快地处理这个问题吗?

文件 channel :

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();

最佳答案

FileChannel 是您的最佳选择。它用于大量写入。 阅读api文档 here

关于java - 将字符串写入大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16111382/

相关文章:

产生文本文件交替行的 Pythonic 方法

java - 如何创建一个名称稍作修改并位于同一文件夹中的新文件?

java - 带有匹配器的正则表达式仅返回第一个结果

java - Minecraft NPC 没有在服务器上生成并攻击我 : null pointer error

io - Xilinx 约束文件中的 IO 数组 [VHDL Spartan-6]

java - 从java中的项目文件夹加载图像

java - 我可以在哪里使用 jasypt 存储加密 key

java - M2Eclipse 缺少 Artifact (它没有检查 ~user/.m2 中的本地存储库)

java - Guice:为什么 TypeLiteral<T> getRawType() 方法返回 Class<? super T> 而不是 Class<T>?

python - 如何消除 "sys.excepthook is missing"错误?