背景:
1、向文件里写入数据
2、读取文件里刚刚写入的数据,发现没读到
原因:
就是因为在写入磁盘过程中,还没写完呢(写入不是直接写到磁盘上的,是有个缓冲的),就是开始读了
解决办法一:
使用fileWriter.flush();强制将缓冲刷新到磁盘上
package day04.io_class;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
// 输入输出,是对于内存来说的,所以读,是输入流,写是输出流(从内存写到磁盘)
public class CharIoStream {
public static void main(String[] args){
String path ="out/b.txt";
try (FileWriter fileWriter = new FileWriter(path,true);
FileReader in = new FileReader(path);){
fileWriter.write("大家好\n".toCharArray());
fileWriter.write("\t我是哈哈".toCharArray());
/*
注意,这里有一个细节,1我们先写,2我们再读,发现读的数据不是写的内容
就是因为在写入磁盘过程中,还没写完呢,就是开始读了
使用fileWriter.flush();强制将缓冲刷新到磁盘上
*/
fileWriter.flush();
char[] chars = new char[128];
int n = 0;
while ((n=in.read(chars))!=-1){
String str =new String(chars,0,n);
System.out.println(str);
}
}catch (Exception e){
e.printStackTrace();
}
}
}
解决办法二:
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo02 {
public static void main(String[] args) throws IOException {
FileOutputStream outputStream = new FileOutputStream("src/main/java/day05/io/demo2.txt");
outputStream.write("hello".getBytes());
// 将流里的数据刷到磁盘上
outputStream.flush();
outputStream.close();
}
}
outputStream.flush(); 将流里的数据,刷到磁盘上。(最好加一下)