十一、i/o处理(Java.io.*包)
1、基本概念
以前常用的输出有System.out.pint() PrintWriter
输入有Scanner
Stream流:二进制流,所有的流使用完都需要用close()关闭其中输出流还要用 flush()清空
-
字节型的文件(word属于字节型文件)
InputStream 输入流 字节流 节点流
OutputSteam 输出流 字节流 节点流
BufferedInputStream 输入流 字节流 处理流
BufferedOutputSteam 输出流 字节流 处理流 -
文本型的文件(用txt打不开的)
Reader 输入流 字符流 节点流
Writer 输出流 字符流 节点流
BufferedReader 输入流 字符流 处理流
BufferedWriter 输入流 字符流 处理流 -
其他文件:
对象流 Object Input Stream与Object Output Stream:
数据流 DataInput Stream与DataOutput Stream
分类:
按方向分类:输入流(向内存中输入),输出流(从内存中向外输出)
按数据单位分类:字节流(1个bit),字符流(2个字节)
按功能分类:节点流(input stream等),处理流(缓冲流)
处理流必须建立在节点流的基础之上
2、file类:可以对文件本身属性操作的类(文件或目录的路径的抽象表示)
1、例如:file file = new file(“路径”);//一个反斜杠表示转义,在表示路径时必须用双反斜杠
2、常用方法:
序号 | 返回值 | 方法 | 描述 |
---|---|---|---|
1 | Boolean | exists() | 测试此抽象路径名表示的文件或目录是否存在。 |
2 | String | getName() | 返回由此抽象路径名表示的文件或目录的名称。 |
3 | Boolean | isDirectory() | 测试此抽象路径名表示的文件是否为目录。 |
4 | Boolean | canRead() | 测试应用程序是否可以读取由此抽象路径名表示的文件。 |
5 | Boolean | canWrite() | 测试应用程序是否可以修改由此抽象路径名表示的文件。 |
6 | Boolean | mkdirs() | 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。(重复执行会覆盖目录不会报错,但是返回值是false) |
7 | Boolean | delete() | 删除由此抽象路径名表示的文件或目录(先找到当前目录的父级,然后删除父级目录下的所有子类)。 |
3、字节流:处理二进制文件
1、input stream:抽象类,一般使用子类FileInputStream
一般用于几十K等小文件的读取
1、 构造方法:
InputStream input = new FileInputStream(“路径或者file”);
如果命名文件不存在,则是一个目录而不是常规文件,或者由于某些其他原因无法打开读取,因此抛出一个FileNotFoundException ,所以需要强制捕获异常。
2、 常用方法:(效率越来越高)
序号 | 返回值 | 方法 | 描述 |
---|---|---|---|
1 | Int | read() | 从该输入流读取一个字节的数据。 |
2 | Int | read(byte[] b) | 从该输入流读取最多 b个字节的数据为字节数组。b一般小于1024个字节 |
解释:1、public int read() throws IOException
1、从该输入流读取一个字节的数据。 如果没有输入可用,此方法将停止。
2、结果 :返回数据的下一个字节,如果达到文件的末尾, 则返回-1 。
3、异常:IOException - 如果发生I / O错误
2、OutputSteam抽象类,一般使用子类FileOutputStream
1、构造方法:
OnputStream input = new FileOutputStream(“路径”);//自动新建所需要存放数据的文件
2、常用方法:(效率越来越高)
序号 | 返回值 | 方法 | 描述 |
---|---|---|---|
1 | Void | write(int b) | 将指定的字节写入此文件输出流。 |
2 | Void | write(byte[] b) | 将 b个字节从指定的字节数组写入此文件输出流,b一般小于1024个字节 |
3、BufferedInputStream:缓冲流(处理流的一种),提高了读取速率(用于大文件的读取)
1、处理流必须建立在节点流的基础上,用于几十兆等大文件的读取
2、原理:在需要读取的两个文件之间新建一个缓冲区
3、构造方法:
BufferedInputStream是一个普通类,直接new实例化、
BufferedInputStream bis = new BufferedInputStream(InputStream的对象)
4、常用方法
序号 | 返回值 | 方法 | 描述 |
---|---|---|---|
1 | Int | read(byte[] b) | 从该输入流读取最多 b个字节的数据为字节数组。b一般大于1k小于4k个字节 |
4、BufferedOutputStream:类比BufferedInputStream
构造方法:
BufferedOutputStream bos = new BufferedOutputStream(output stream的对象);
常用方法:
序号 | 返回值 | 方法 | 描述 |
---|---|---|---|
1 | Void | flush (int b) | 清空缓冲区 |
2 | Void | write(byte[] b) | 将 b个字节从指定的字节数组写入此文件输出流,b一般大于1k小于4k个字节 |
4、字符流:处理文本文件
1、Reader:读文件的抽象类,其子类有 FileReader
1、 构造方法:
Reader reader = new FileReader (“路径或者file”);
如果命名文件不存在,则是一个目录而不是常规文件,或者由于某些其他原因无法打开读取,因此抛出一个FileNotFoundException ,所以需要强制捕获异常。
2、 常用方法:与inputstream一样
2、Writer:写文件的抽象类,其子类有FileWriter
1、 构造方法:
Writer writer = new FileWriter (“路径或者file”);
如果命名文件不存在,则是一个目录而不是常规文件,或者由于某些其他原因无法打开读取,因此抛出一个FileNotFoundException ,所以需要强制捕获异常。
2、 常用方法:与Outputstream一样
3、BufferedReader:处理流,普通类
构造方法:
BufferedReader reader =new BufferedReader();
常用方法
序号 | 返回值 | 方法 | 描述 |
---|---|---|---|
1 | int | read() | 读一个字符 |
2 | String | readLine() | 读一行文字。 |
4、BufferedWriter:
构造方法:
BufferedWriter write=new BufferedWriter();
常用方法:
序号 | 返回值 | 方法 | 描述 |
---|---|---|---|
1 | Void | flush (int b) | 清空缓冲区 |
2 | Void | write(int c) | 写一个字符;当c为line时,是写一行字符的ascall;可以强转为char类型 |
3 | Void | newLine() | 当输出一行后换行 |
5、对象流(处理流)了解就可以
1、对象的钝化处理:将内存中的临时对象,以文件的形式永久保存在磁盘中
2、Serializable接口:使其子类型能够可序列化。 即可以产生二进制文件
3、Object Input Stream与Object Output Stream:普通类可直接实例化
一般用于分布式程序,即一个程序需要多台设备协同处理
6、数据流:(处理流)了解就可以
读写Java基本数据类型的数据(将Java中的变量以文件的形式存储)
1、、DataInput Stream与DataOutput Stream