Java 使用BufferedWriter写入时丢失数据
我想逐行读取一个20GB的大型ASCII文本文件,并将其中的一部分复制到一个单独的文件中。以下示例代码在写入输出文件时释放数据。我用一些println测试了阅读器,它的工作情况与预期相符。我试图增加BufferedWriter的缓冲区,但没有改进。同样,冲洗也不起作用。在这种情况下,输出文件的大小应该在40MB左右 我希望你能帮助我, 问候蒂姆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
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,因为您正在丢失文件末尾的