流的分类:
1.按照流向区分
a.字节输入流 InputStream:
File InputStream–read()
b.字节输出流OutputStream:
FileOutputStream–write()
2.按照数据单位区分
a.字节流
b.字符流
3.按照层次区分
a.底层流
b.高级流(缓冲流)
字节流:
作用: 做文件的复制
子类:
1.字节输入流 InputStream:
File InputStream
(1).构造方法:
new FileInputStream(File)
new FileInputStream(“相对路径”)
(2)常用API:
int read() -> 读一个字节
注意:
a.读一个字节= 8位,读的是低8位,其他24位全补0,所以永远是正数
b.读到末尾返回-1
int read(byte[]) -> 读字节数组
2.字节输出流OutputStream:
FileOutputStream–write()
(1).构造方法:
new FileOutputStream(File)
new FileOutputStream(File,true) ->询问是否在原文件上进行追加内容
new FileOutputStream(“相对路径”)
new FileOutputStream(“相对路径”,true)
(2).常用API:
void write(int i) -> 写入一个字节(写入低8位)
void write(byte[] bs) -> 写一个字节数组
void write(byte[], int off, int len) -> 写入一个字节数组,从字节数组的第几位下标开始,写入长度为多少
3.缓冲字节流(高级流):
作用: 提高效率
子类/实现类:
1.缓冲字节输入流:BufferedInputStream
1).创建:
new BufferedInputStream(底层流)
2.缓冲字节输出流:BufferedOutputStream
1).创建:
new :BufferedOutputStream(底层流)
2)常用API:
void flush() - 手动刷新缓冲区
字符流
字符流:Reader/Writer
1.作用: 做文件的读写
2.子类/实现类:
a.字符输入流:InputStreamReader()
(1)创建:
a.InputStreamReader(底层流) - 默认字符集
底层流:可以决定文件是否进行追加
b.InputStreamReader(底层流,字符集) - 指定字符集
字符集:
UFT-8 1字符 = 3字节
GBK 1字符 = 2字节
(2)常用API
int read() - 读取单个字符。
注意: 读到末尾返回-1
b.字符输出流:OutputStreamWriter
(1)创建:
OutputStreamWriter(底层流) - 默认字符集
OutputStreamWriter(底层流,字符集) - 指定字符集
(2)常用API:
void flush() 刷新该流的缓冲。
void write(char[] cbuf, int off, int len) - 写入字符数组的某一部分。
void write(int c) -写入单个字符。
void write(String str, int off, int len) - 写入字符串的某一部分。
c.缓冲字符流(高级流/包装流):
1.缓冲字符输入流:BufferedReader
1)创建:
BufferedReader(底层字符流)
2)常用API:
String readLine() - 读一整行
主要:注意返回null,标记读到末尾
2.缓冲字符输出流:PrintWriter
1)创建:
PrintWriter(OutputStream out, boolean autoFlush)
作用:
a.OutputStream,字节输出流,可以指定是否进行追加
b.是否刷新缓冲区
PrintWriter(fileName, 字符集) -指定字符集
作用:
a.可以指定字符集
PrintWriter(Writer, boolean autoFlush)
作用:
a.Writer需要使用底层字符流进行构建
底层字符流可以指定字符集
b.底层字符流使用底层字节流进行构建
底层字节流可以指定是否进行追加
c.是否进行自动刷新缓冲区
2)常用API:
void print() - 写出内容,打印不换行
注意: 使用print()结束,必须手动调用刷新缓冲区
pw.flush()
void println() - 写出内容,打印并且换行
注意: 要设置了自动刷新缓冲区,只要遇到println()才会进行自动刷新