1、在理解JavaIO流之前,首先你得对File类进行一个了解。
- File类的对象代表一个文件或者一个文件目录(俗称:文件夹)。
- 判断文件是否存在,文件是不是可读或可写,文件长度是多少,文件的最近修改日期是什么时候。这些功能就不能通过IO流去做了,文件本身就可以做这些事。
- 了解File类中常用的方法,从此去Java中IO流File类详解
- 当然如果你需要读取或写入文件内容,必须使用IO流来完成。
2、开始进入正题,介绍JavaIO流了。
java.io包下提供了各种“流” 类和接口,用以获取不同种类的数据,并通过标准的方法,输入或输出数据。
- 按照数据的单位不同分为:字节流,字符流。
- 按照流的方向不同分为:输入流,输出流。
- 按照流的角色的不同分为:节点流,处理流。
(抽象基类) | 字节流 | 字符流 |
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
为什么要定义成抽象类呢,因为去读和写的实际情况太复杂了,这里边没办法指明怎么去读,怎么去写,这些事交给具体的子类去做。在这个里面只定义一些抽象的功能。 |
看到这里,你可能被这些各种流绕的有点晕,那我们首先把IO流划分为节点流和处理流。
1)第一个讲一讲节点流。
节点流就是直接对文件进行操作的流,也叫做文件流,通过这个IO流可以实现对文件的读取和写入,而这个读取和写入的过程呢,又可以分为字节输入流和字节输出流以及字符输入流和字符输出流。
字节输入输出流,一般用来处理非文本文件(.jpg,.mp4,.mp3,.abi,.doc,.ppt,…)
而字符输入输出流则用来处理文本文件(.txt,.java,.c,.cpp)的数据。
了解具体的代码示例以及使用细节的话,从这去:java、IO流之文件流(节点流)详解
2)第二个来讲一讲处理流。
处理流,顾名思义,就是在原节点流的基础上进行处理。对其起到一个拓展的作用。
缓冲流是处理流的一种,缓冲流内部提供了一个缓冲区,用于提高流的读取,写入效率。具体的使用细节以及代码实现可以从这去:java、IO流之缓冲流详解 转换流也是缓冲流的一种,提供了在字节流和字符流之间的转换。可以把我们不好理解的字节转换成可以理解的字符(解码),然后把我们可以理解的字符再转换成字节存进去(编码)。具体的使用细节以及代码实现可以从这去:Java、IO流之转换流详解
JavaIO流除了这些需要我们重点掌握的流以外呢还有一些需要我们了解的流。
比如说输入输出流、打印流、数据流.…我们经常使用的Scanner类中写入的System.in就是标准的输入流。你想了解不使用Scanner,一个从键盘到黑糊糊窗口的交互功能是怎么实现的吗?来看看这个吧JavaIO流之标准输入输出流,打印流以及数据流。
最后呢就是说一说对象流了,他和数据流有相似之处,但是他不但可以把基本数据类型的变量或字符串持久化到文件,还能够将对象以二进制数据流的形式持久化到文件中去。具体怎么使用,来看看这个吧:Java,IO流之对象流详解,当然了解对象流之后想必你对序列化和反序列化会产生疑问。自定义的类要想序列化需要满足哪些要求呢?来看这里:java中的序列化机制详解。
看到这里你是不是对JavaIO有了深刻的理解了呢。