1. IO流
1)根据方向分为:
输入流和输出流。方向的定了是基于我们的程序的。流向我们程序的流叫做:输入流;从程序向外流的叫做:输出流
2)流根据源头分为:
基本流(节点流):从特定的地方读写的流类,如磁盘或一块内存区域。即有来源。
处理流(高级流、过滤流):没有数据来源,不能独立存在,它的存在是用于处理基本流的。是使用一个已经存在的输入流或输出流连接创建的。
3)流根据处理的数据单位不同划分为:
字节流:以一个“字节”为单位,以Stream结尾
字符流:以一个“字符”为单位,以Reader/Writer结尾
2. 基本字节流FileInputStream和FileOutputStream
用于读写文件的字节流FIS/FOS(基本流)
1)FileInputStream:文件字节输入流
FileInputStream 常用构造方法:
① FileInputStream(File file):通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的File对象file指定。即向file文件中写入数据。
② FileInputStream(String filePath):通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的文件路径名指定。也可直接写当前项目下文件名。
常用方法:
① int read(int d):读取int值的低8位。
② int read(byte[] b):将b数组中所有字节读出,返回读取的字节个数。
③ int read(byte[] b,int offset,int length):将b数组中offset位置开始读出length个字节。
④ available()方法:返回当前字节输入流 可读取的总字节数。
2)FileOutputStream:文件字节输出流
FileOutputStream常用构造方法:
① FileOutputStream(File File):创建一个向指定File对象表示的文件中写入数据的文件输出流。会重写以前的内容,向file文件中写入数据时,若该文件不存在,则会自动创建该文件。
② FileOubputStream(File file,boolean append):append为true则对当前文件末尾进行写操作(追加,但不重写以前的)。
③ FileOubputStream(String filePath):创建一个向具有指定名称的文件中写入数据的文件输出流。前提路径存在,写当前目录下的文件名或者全路径。
④ FileOubputStream(String filePath,boolean append):append为true则对当前文件末尾进行写操作(追加,但不重写以前的)。
常用方法:
① void write(int d):写入int值的低8位。
② void write(byte[] d):将d数组中所有字节写入。
③ void write(byte[] d,int offset,int length):将d数组中offset位置开始写入length个字节。
案例22:
3. 缓冲字节流BufferedInputStream和BufferedOutputStream
1)BufferedInputStream:缓冲字节输入流,构造器需要传入基本字节输入流BufferedInputStream(InputStream in)
常用方法:
① int read():从输入流中读取一个字节。
② int read(byte[] b,int offset,int length):从此字节输入流中给定偏移量offset处开始将各字节读取到指定的 byte 数组中。
2)BufferedOutputStream:缓冲字节输出流,构造器需要传入基本字节输出流BufferedOutputStream(OutputStream out)
常用方法:
① void write(int d):将指定的字节写入此缓冲的输出流。
② void write(byte[] d,int offset,int length):将指定 byte数组中从偏移量 offset开始的 length个字节写入此缓冲的输出流。
③ void flush():将缓冲区中的数据一次性写出,“清空”缓冲区。
3)缓冲流内部维护着一个缓冲区,每次都尽可能的读取更多的字节放入到缓冲区,再将缓冲区中的内容部分或全部返回给用户,因此可以提高读写效率。
4)有缓冲效果的流,一般为写入操作的流,在数据都写完后一定要flush,flush的作用是将缓冲区中未写出的数据一次性写出:bos.flush();即不论缓存区有多少数据,先写过去,缓冲区再下班~确保所有字符都写出
5)使用JDK的话,通常情况下,我们只需要关闭最外层的流。
案例23:
4. 转换流InputStreamReader和OutputStreanWriter
以“单个字符”为单位读写数据,一次处理一个字符(unicode)。 字符流底层还是基于字节形式读写的,所以都是将字节流转成字符流。在字符输入输出流阶段,进行编码修改与设置。
所有字符流都是高级流。
1)InputStreamReader:字符输入流。
A.常用构造方法:
InputStreamReader(InputStream in):创建一个字符集的输入流。
InputStreamReader(InputStream in, String charsetName):创建一个使用指定字符集的输入流。
B.常用方法:
① int read():读取单个字符。
② int read(char cs[], int offset, int length):读入字符数组中从offset开始的length长度的字符。
③ void close():关闭流。
2)OutputStreamWriter:字符输出流
A.常用构造方法:
OutputStreamWriter(OutputStream out):创建一个字符集的输出流。
OutputStreamWriter(OutputStream out, String charset):创建一个使用指定字符集的输出流。
B.常用方法:
① void write(int c):写入单个字符。
② void write(char c[], int off, int len):写入从字符数组off开头到len长度的部分
③ void write(String str, int off, int len):写入从字符串off开头到len长度的部分。
④ void flush():将缓冲区中的数据一次性写出,“清空”缓冲区。
⑤ void close():关闭流。
5. 缓冲字符流BufferedReader和BufferedWriter
可以以“行”为单位读写“字符”,高级流。 在字符输入输出流修改编码。
1)BufferedReader:缓冲字符输入流,以行为单位读字符
A.常用构造方法:
BufferedReader(Reader in):创建一个使用默认大小的缓冲字符输入流。
BufferedReader(Reader in, int size):创建一个使用指定大小的缓冲字符输入流。
B.常用方法:
① int read():读取单个字符。如果已到达流末尾,则返回-1。
② int read(char cbuf[], int off, int len):从字符数组中读取从off开始的len长度的字符。返回读取的字符数,如果已到达流末尾,则返回-1。
③ String readLine():读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。如果已到达流末尾,则返回 null。EOF:end of file文件末尾。
④ void close():关闭流。
案例24:
案例25:
2)BufferedWriter:缓冲字符输出流,以行为单位写字符
A.常用构造方法:
BufferedWriter(Writer out):创建一个使用默认大小的缓冲字符输出流。
BufferedWriter(Writer out, int size):创建一个使用给定大小的缓冲字符输出流。
B.常用方法:
① void write(int c):写入单个字符。
② void write(char[] c,int off,int len):写入字符数组从off开始的len长度的字符。
③ void write(String s,int off,int len):写入字符串中从off开始的len长度的字符。
④ void newLine():写入一个行分隔符。
⑤ flush():将缓冲区中的数据一次性写出,“清空”缓冲区。
⑥ close():关闭流。
案例26:
6. PrintWriter输出流
是另一种缓冲“字符”输出流,以“行”为单位,常用它作输出,BufferedWriter用的少。
1)Servlet:运行在服务器端的小程序,给客户端发送相应使用的输出流就是PrintWriter。
2)写方法:println(String data):带换行符输出一个字符串,不用手动换行了。
3)构造方式:
PrintWriter(File file):以行为单位向文件写数据
PrintWriter(OutputStream out):以行为单位向字节输出流写数据
PrintWriter(Writer writer):以行为单位向字符输出流写数据
PrintWriter(String fileName):以行为单位向指定路径的文件写数据
4)常用方法
使用上和BufferedWriter一样,只是使用println()会自动换行。
案例27: