import java.io.*;
public class TestBufferedReader {
public static void main(String[] args) {
try{
BufferedReader br = new BufferedReader(new FileReader("f:/src/io.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("f:/src/read2.txt"));
String m;
do{
m = br.readLine();
if(m == null ){
System.exit(-1);
}
//System.out.println(m);
bw.write(m,0,m.length());
} while(m != null);
br.close();
bw.close();
}
catch(IOException e){
e.printStackTrace();
}
}
}
我的写入文件一直为空,什么也写不进去
应该是写入成功的,可能是编码问题,你打开写入的文件然后ctrl+A全选看看,应该是有内容的
知道了,是因为你的这句代码
if(m == null ){
System.exit(-1);
}
他没有跑bw.close();所以留没有写入文件
正确代码如下:
try{
BufferedReader br = new BufferedReader(new FileReader("/home/chenfangyi/桌面/io.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("/home/chenfangyi/桌面/read2.txt"));
String m;
do{
m = br.readLine();
if(m == null ){
break;
}
//System.out.println(m);
bw.write(m,0,m.length());
} while(m != null);
br.close();
bw.close();
}
catch(IOException e){
e.printStackTrace();
}
因为在close之前默认调用了flush方法,把缓存内容写入文件。你可以试下在exit之前加上bw.flush()。看能不能出来值?
我告诉你正确答案吧。
一楼的解决思路是对的,但是没有告诉你原因。
我建议你去看看 BufferedWriter的javadoc:
https://docs.oracle.com/javase/7/docs/api/java/io/BufferedWriter.html
这个writer并不会立即将字符写入目标流里,而是先暂时写在一个“缓冲区”,直到如下情况,缓冲区里的内容才会输出到输出流里:
1 缓冲区满了
2 调用了BufferedWriter的flush方法
3 调用了BufferedWriter的close方法,该方法会先flush缓冲区到输出流。
你的代码正如一楼所说,再还没有将BufferedWriter的缓冲区输出到流里,就退出了整个Java,自然输出文件里不会有任何内容。