1.概念:IO流本质就是一套进行数据传输的机制,
根据数据传输的方向可分为: 输入流---数据往内存中传输 输出流---数据从内存中往外流出
根据数据传输的方式可分为:字符流 字节流
IO流四大基本流都是抽象类
输出流 | 输入流 | |
字符流 | Writer | Reader |
字节流 | OutputStream | InputStream |
2.缓冲流
BufferedReader---提供了一个缓冲区
(读文件时会先将内容存入缓冲区),在构建的时候需要传入一个reader对象,真正读取数据时依靠的是这个对象
public static void main(String[] args) throws Exception {
FileReader reader=new FileReader("D:\\a.txt");
BufferedReader br=new BufferedReader(reader);
String str;
//readLine方法表示读取一行数据,读到最后一行会返回null
while((str=br.readLine())!=null){
System.out.println(str)
}
br.close();
}
BufferedWriter---提供了一个更大的缓冲区
(因为好多输出流本身存在缓冲区,所以此流用的少)
public static void main(String[] args) throws Exception {
BufferedWriter writer=new BufferedWriter(new FileWriter("D:\\a.txt"));
//向文件中写数据
writer.write("abc");
//关流
writer.close();
}
3.FileOutputStream---文件字节输出流
//字节输出流向文件中写数据
public static void main(String[] args) throws IOException {
FileOutputStream out=new FileOutputStream("D:\\a.txt");
//需要将字符转化为字节数组
out.write("abc".getBytes());
//写入成功,说明字节输出流没有缓冲区,不需要flush
out.close();
}
FileInputStrem---文件字节输入流
//字节输入流读取数据
public static void main(String[] args) throws IOException {
FileInputStream fileInputStream=new FileInputStream("D:\\a.txt");
//定义字节数组作为缓冲区
byte[]b=new byte[1024];
int a;
//将数据读到数组中
while((a=fileInputStream.read(b))!=-1){
System.out.println(new String(b,0,a));
}
fileInputStream.close()
}
FileWriter----文件字符输出流
//字符输出流向文件中写数据
public static void main(String[] args) throws IOException {
FileWriter writer=new FileWriter("D:\\a.txt");
//先将数据写到缓冲区中,缓冲区未满,程序就已经结束,导致数据死在缓冲区
writer.write("123");
//将缓冲区中的数据冲到文件中
writer.flush();
writer.close();
}
FileReader---文件字符输入流
//文件字节输入流读取数据
public static void main(String[] args) throws IOException {
FileReader reader=new FileReader("D:\\a.txt");
char[]c=new char[1024];
int a;
while((a=reader.read(c))!=-1){
System.out.println(new String(c,0,a));
}
reader.close();
}