java 写文件出错

来源:百度知道 编辑:UC知道 时间:2024/09/22 09:28:24
为什么下列程序执行后 在f:/java/test/下创建了line.txt文件,而在控制台输入“hello”回车后却不在line.txt里显示内容呢,哪里出错了?谢谢!
package InOut;

import java.io.BufferedReader;
import java.io.BufferedWriter;

import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;

public class WriteFile {

public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(new FileWriter("f:/java/test/line.txt"));
String s=null;
while(true){
s=br.readLine();
System.out.flush();
if(s.length()==0)break;
System.out.println(s);

bw.write(s);
bw.newLine();
}
bw.close();
}
}

1.问题出在System.out.flush();这行,它的作用是将缓冲区内容的清出,用在从键盘READ数据显示在控制台上而非文件中
2.解决方法:把System.out.flush();去掉,在s=br.readLine(); 的上面加入bw.flush();这行。这样当你输入一行后,就会在第二次循环时提前执行flush操作、写入文件。

能编译 能写入文件

没一点问题,但是你用的无限循环,你的唯一跳处循环的条件是s==""也就是说
终止输入时回车一下就可以了

复制粘贴编译运行了你的代码,我这却是完全正确的呢,在文件中有写入显示你输入的内容啊!

你的
if(s.length()==0)break;
有点问题
把条件改成if (s.length() != 0)
break放在bw.newLine();后面
试试

FileWriter fw=new FileWriter("line.txt");
BufferedWriter bw=new BufferedWriter(fw);

bw.write(s);
bw.newLine();
后加上 bw.flush();
fw.flush();

流操作并不一定是实时的写入的,特别是带Buffered开头的.如果没有用flush();强制刷新的话,它会自动根据需要来缓存流,当流遇到close()的时候会全部刷新,清空缓存.
你的程序用了while(true),所以后面的bw.close(); 不可能被调到.也就无法确定程序什么时候写硬盘了.

其实你原来的程序只要在控制台多输入几行,当超过流的默认缓存区大小的时候,也是会写入的.

while(true)这个是死循环了啊。