Java 使用BufferedWriter写入时丢失数据

Java 使用BufferedWriter写入时丢失数据,java,file-io,bufferedreader,bufferedwriter,Java,File Io,Bufferedreader,Bufferedwriter,我想逐行读取一个20GB的大型ASCII文本文件,并将其中的一部分复制到一个单独的文件中。以下示例代码在写入输出文件时释放数据。我用一些println测试了阅读器,它的工作情况与预期相符。我试图增加BufferedWriter的缓冲区,但没有改进。同样,冲洗也不起作用。在这种情况下,输出文件的大小应该在40MB左右 我希望你能帮助我, 问候蒂姆 public void split() throws Exception{ BufferedReader inStream = new Buff

我想逐行读取一个20GB的大型ASCII文本文件,并将其中的一部分复制到一个单独的文件中。以下示例代码在写入输出文件时释放数据。我用一些println测试了阅读器,它的工作情况与预期相符。我试图增加BufferedWriter的缓冲区,但没有改进。同样,冲洗也不起作用。在这种情况下,输出文件的大小应该在40MB左右

我希望你能帮助我, 问候蒂姆

public void split() throws Exception{
    BufferedReader inStream = new BufferedReader(new FileReader("input.txt"));      
    BufferedWriter outStream = new BufferedWriter(new FileWriter("output.txt"));

    for(int i=0;i<700000;i++){
        String tempString = inStream.readLine().trim();
        if(doOtherStuff(tempString,i)){
            break;
        }
        outStream.write(tempString);
        outStream.newLine();
    }
    inStream.close();
    outStream.close();  
}
也许你是这个意思

for (;;) {
    String tempString = inStream.readLine();
    if (tempString == null)
        break;
    tempString = tempString.trim();
    if(doOtherStuff(tempString,i)){
        continue; // Skip writing, continue with next line
    }
    outStream.write(tempString);
    outStream.newLine();
}

如果没有空测试,EOF将抛出异常。

为什么使用for循环而不是while循环?需要复制多少行的信息将与文件的第一行一起读入。我认为这与问题无关,所以简而言之,你没有告诉我们什么数据丢失或在哪里丢失的细节,你也不知道你的代码为什么会出现错误,所以一切都是相关的。我的经验是,无论您如何计算文件有多少行,最好使用while循环,让BufferedReader在没有行可读时通知您。我将实现while循环,以确保我只在有数据的情况下读取数据。但问题在于数据的写入。如果在写入数据之前添加System.out.printlntempString,则可以看到所有行都已正确读入。每行->临时字符串包含30到40个字符。输出文件在中线停止,所以我认为问题是在OutStuts.WrrutEntScript中发生的。此外,也没有例外Thrown可能只是我在过去的一两次搞笑之后,但我总是在关闭流之前调用Flush,因为您正在丢失文件末尾的