java学习day27---(流的分类)

一、流的分类

字节流

OutputStream抽象类 子类:FileOutPutStream

InputStream抽象类 子类:FileInputStream


输出流

FileOutPutStream fos=new FileOutPutStream(D:\\abc.txt)

1.创建流对象 2.开启内存到文件的通道 3.没有文件,创建这个文件

字节流读写都是字节

fos.write(97)  //   在文本中写入97字节,经过微软文本编辑器解码后显示出来是字母a

windows的文本编辑器很强大,可以根据文本来选择编码集

流必须手动释放:fos.close() 垃圾回收器不会自动回收

续写操作:在构造方法后面

FileOutPutStream fos=new FileOutPutStream(D:\\abc.txt,true)

标准捕获写法


输入流

必须保证输入的文件存在,不存在会抛出异常

FileInPutStream fis=new FileInPutStream(D:\\abc.txt)

int read() 返回值是字节,末尾就返回-1

读取全部字节:

int by;
while((by=fis.read())!=-1){
 System.out.println(by);
}

int read(byte[] b) 返回值是读取到的字节个数,将读取到的字节依次存入变量b中

字节流不能读中文!

缓冲流

在文件和内存之间开辟一个缓冲区,提高传输效率

构造方法要传入一个字节流

FileInPutStream fis=new FileInPutStream(D:\\abc.txt)
BufferedInputSream bis=new BufferedInputSream(fis);

之后操作就操作缓冲流就行了,关闭也关闭缓冲流

缓冲区默认大小:8192字节

将缓冲区的数据刷新到文件中:flush()

close()也能刷新一次,但是刷新后就关闭流了

字符流

字符流=字节流+编码集 使用缓冲区来解码

reader类,抽象父类,构造函数要传入一个字节流

InputStreamReader isr=new InputStreamReader(new FileInPutStream(D:\\abc.txt))

输入字符流和输出字符流的编码集可以不一样!

输入字符流的编码集要和读取文本的编码集一样,不然读取就是乱码

输出字符流的编码集要和打开这个文本的编辑器编码集一样

windows的文本编辑器强大,会根据文本的编码集来解码,因此可以打开任意编码集的文本

FileReader类

文本便捷类

支持整行读取:readerLine();

字符缓冲流

newLine()换行

 

字节流:掌握一次读写数组

字符流:掌握一次读写数组、一次读写一行

上一篇:java基础-io-保存文件


下一篇:IO流