我正在读取文件in.txt
并将数字写入文件out.txt
,直到找到42.但是在out.txt中我得到空白文件。相反,如果我写System.out.println(num)
而不是out.write(num)
我得到了正确的结果。这意味着问题出在BufferedReader的声明中。我错了吗?
import java.io。*;
class Numbers
{
public static void main(String args[])
{
try{
String num;
BufferedReader in=new BufferedReader(new FileReader("in.txt"));
BufferedWriter out=new BufferedWriter(new FileWriter("out.txt"));
while((num=in.readLine())!=null)
{
if(Integer.parseInt(num)==42)
break;
else
out.write(num);
}
}catch(Exception e)
{
System.out.println("File not found");
}
}
}
答案 0 :(得分:1)
问题是您没有关闭out
流。将其更改为:
BufferedReader in = null;
BufferedReader out = null;
try{
String num;
in = new BufferedReader(new FileReader("in.txt"));
out = new BufferedWriter(new FileWriter("out.txt"));
while((num=in.readLine())!=null)
{
if(Integer.parseInt(num)==42)
break;
else
out.write(num);
}
out.close()
}catch(Exception e)
{
System.out.println("File not found");
}finally{
try{
if(in!=null) in.close();
if(out!=null) out.close();
}catch(Exception ex) {ex.printStackTrace();}
}
这是因为,您的OutputStream会缓冲您的数据并定期刷新它。关闭流不仅会刷新它,而且还使其他应用程序可以安全地使用该文件。
在您的情况下,您可能会发现一种奇怪的行为(有时完全写入,有时不会)。这是因为BufferedWriter()尝试在其finalize
方法中关闭它(可能会或可能不会被调用)
答案 1 :(得分:0)
您需要关闭FileWriter
:
while((num=in.readLine())!=null)
{
if(Integer.parseInt(num)==42)
break;
else{
out.write(num);
out.flush();
}
}
out.close();
内容总是需要刷新。 close()
本身会为您刷新流,但无论如何flush()
都是好的做法。
答案 2 :(得分:0)
您应该在停止使用后关闭流。关闭它将首先刷新流(将打印所有缓冲的数据),其次,将释放流使用的所有资源。
答案 3 :(得分:0)
确保在try block结束时有out.close()
。
如果您将in.txt
作为一个非常大的文件,那么您会在out.txt
中看到一些数据。
BufferedWriter仅在有足够数据要刷新时写入,大约等于一个块大小。