IO流概念和要素
本质是一套用于传输数据的机制
IO流的四大基本流
输入流 | 输出流 | |
---|---|---|
字符流 | 字符输入流 | 字符输出流 |
字节流 | 字节输入流 | 字节输出流 |
传输的场景:
根据数据存储或者获取的位置决定传输的场景:硬盘、内存、网络、外设设备
a、字符流
字符输出流
往一个硬盘txt文件里写入数据 字符输出流 硬盘文件—FileWriter
publicclassFileWriterDemo1{
publicstaticvoidmain(String[]args)throwsIOException{
//创建文件字符输出流对象
//会去检测路径信息,如果路径信息指定的文件不存在就会创建一个空文件
//如果路径信息指定的文件已经存在而且有内容就会新建空文件把这个文件进行覆盖
FileWriterfw=newFileWriter("D:\\1.txt");
//往文件里写数据
//底层是根据缓冲区进行数据传输
//规定只有数据存满缓冲区才能进行数据传输
//现在传输的数据没有存满缓冲区,就滞留在缓冲区数据就没有传过去
fw.write("abc");
//数据存满缓冲区才能传输,否则可能会丢失数据
//手动进行冲刷缓冲区
fw.flush();
//当数据传输完毕需要进行关流
//会自带自动冲刷缓冲区的操作
fw.close();
//文件字符输出流对象变成一个无用对象---数据已经传输完毕不会使用对象
//对象置为null变为无用对象
fw=null;
}
}
字符输入流
从一个硬盘txt文件读取数据 字符输入流 硬盘文件—FileReader
publicclassFileReaderDemo2{
publicstaticvoidmain(String[]args)throwsIOException{
//创建文件字符输入流对象
FileReaderfr=newFileReader("D:\\2.txt");
//自建缓冲区
char[]cs=newchar[5];
intlen=-1;
//根据数组进行读取,每次返回的是读取到的字符个数
//把读取到的字符都放进数组中
//结束标志是-1
while((len=fr.read(cs))!=-1){
//输出数组内容就是读取的内容
//把字符数组内容转成字符串输出
System.out.println(newString(cs,0,len));
}
}
}
b、字节流
字节输出流
往一个硬盘txt文件里写入数据 字节输出流 硬盘文件—FileOutputStream
public class FileOutputStreamDemo{
public static void main(String[]args)throwsIOException{
//创建文件字节输出流对象
//布尔值为true表明可以写入文件时追加数据,不写就默认是false
FileOutputStream fos=new FileOutputStream("D:\\abc.txt",true);
//往文件写入数据
//底层没有自带缓冲区
fos.write("abc".getBytes());
//关流
fos.close();
}
}
字节输入流
从一个硬盘txt文件里获取数据 字节输入流 硬盘文件—FileInputStream
public class FileInputStreamDemo{
public static void main(String[]args)throwsIOException{
//创建文件字节输入流对象
FileInputStream fin=new FileInputStream("D:\\abc.txt");
//自建缓冲区
byte[] bs=new byte[4];
int len=-1;
//每次读取的字节存储到数组中,返回的是读取的字节个数
while((len=fin.read(bs))!=-1){
System.out.println(newString(bs,0,len));
}
}
}
c、缓冲流(提供缓冲区)
BufferedReader—给字符输入流提供缓冲区进行数据传输
readLine() 读取一行
publicclassBufferedReaderDemo{
publicstaticvoidmain(String[]args)throwsIOException{
//底层依然还是字符输入流对象进行读取数据
//但是读取的数据的传输有缓冲流提供的缓冲区进行传输
BufferedReaderbr=newBufferedReader
(newFileReader("D:\\2.txt"));
//读取一行数据
/*System.out.println(br.readLine());
System.out.println(br.readLine());
System.out.println(br.readLine());
//读取数据的结束标志就是返回null
System.out.println(br.readLine());*/
Stringstr=null;
while((str=br.readLine())!=null){
System.out.println(str);
}
//关流
br.close();
}
}
d、转换流
OutputStreamWriter—字符流转字节流
publicclassOutputStreamWriterDemo{
publicstaticvoidmain(String[]args)throwsIOException{
//创建转换流对象
//写出的数据是字符串,默认由字符流来进行传输
//转换流对象是由字节输出流对象来构建
//底层是由字节输出流对象来进行传输
//字符流转字节流
OutputStreamWriterosw=newOutputStreamWriter
(newFileOutputStream("D:\\b.txt"));
//写出数据
osw.write("abc");
//关流
osw.close();
}
}
InputStreamReader—字节流转字符流
publicclassInputStreamReaderDemo{
publicstaticvoidmain(String[]args)throwsIOException{
//创建转换流对象
//转换流的对象是由字节输入流对象来构建
//底层是由字节输入流对象来完成读取文件
//展示数据时是通过字符数组来展示的,默认是字符流往字符数组存放数据来展示
//字节流转成字符流
InputStreamReaderisr=newInputStreamReader
(newFileInputStream("D:\\b.txt"));
//读取
char[]cs=newchar[3];
int len=-1;
while((len=isr.read(cs))!=-1){
System.out.println(newString(cs,0,len));
}
}
}