概念
百度百科:流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为 IO 流。换句话说,IO 流就是以流的方式进行输入输出。
在 Java API 中,可以从其中读取一个字节序列的对象称作输入流,而可以向其中写入一个字节序列的对象称作输出流。
抽象类 InputStream 和 OutputStream 构成了输入/输出(I/O)类层次结构的基础
Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。
一个流被定义为一个数据序列。输入流用于从源读取数据,输出流用于向目标写数据。
下图是一个描述输入流和输出流的类层次图。
IO 分类
按功能来分:输入流(input)、输出流(output)。
按类型来分:字节流和字符流。
字节流和字符流的区别是:字节流按 8 位传输以字节为单位输入输出数据,字符流按 16 位传输以字符为单位输入输出数据。本质区别:字节流是原生的操作,字符流是经过处理后的操作。
文件
FileInputStream
该流用于从文件读取数据,它的对象可以用关键字 new 来创建。
可以使用字符串类型的文件名来创建一个输入流对象来读取文件:
1 | InputStream f = new FileInputStream("C:/java/hello"); |
也可以使用文件对象创建
1 | File f = new File("C:/java/hello"); |
序号 | 方法及描述 |
---|---|
1 | public void close() throws IOException{} 关闭此文件输入流并释放与此流有关的所有系统资源。抛出 IOException 异常。 |
2 | protected void finalize()throws IOException {} 这个方法清除与该文件的连接。确保在不再引用文件输入流时调用其 close 方法。抛出 IOException 异常。 |
3 | public int read(int r)throws IOException{}这个方法从 InputStream 对象读取指定字节的数据。返回为整数值。返回下一字节数据,如果已经到结尾则返回-1。 |
4 | public int read(byte[] r) throws IOException{}这个方法从输入流读取 r.length 长度的字节。返回读取的字节数。如果是文件结尾则返回-1。 |
5 | public int available() throws IOException{}返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取的字节数。返回一个整数值。 |
InputStream 常用子类还有:
- ByteArrayInputStream: 字节数组输入流,
- ObjectInputStream:序列化时使用 一般和 ObjectOutputStream 一起使用
- FilterInputStream: 过滤输入流,为基础的输入流提供一些额外的操作。
FileOutputStream
该类用来创建一个文件并向文件中写数据。如果该流在打开文件进行输出前,目标文件不存在,那么该流会创建该文件。有两个构造方法可以用来创建 FileOutputStream 对象。
使用字符串类型的文件名来创建一个输出流对象:
1 | OutputStream f = new FileOutputStream("C:/java/hello") |
同样,也可以使用文件对象创建
1 | File f = new File("C:/java/hello"); |
序号 | 方法及描述 |
---|---|
1 | public void close() throws IOException{}关闭此文件输入流并释放与此流有关的所有系统资源。抛出 IOException 异常。 |
2 | protected void finalize()throws IOException {}这个方法清除与该文件的连接。确保在不再引用文件输入流时调用其 close 方法。抛出 IOException 异常。 |
3 | public void write(int w)throws IOException{}这个方法把指定的字节写到输出流中。 |
4 | public void write(byte[] w)把指定数组中 w.length 长度的字节写到 OutputStream 中。 |
OutputSteam 常用子类还有:
- ByteArrayOutputStream: 字节数组输出流
- ObjectOutputStream: 序列化时使用 一般和 OjbectInputStream 一起使用
- FilterOutputStream:过滤输出流,为基础的输出流提供一些额外的操作。
常用方法示例
1 | public class Test { |
File 常用方法
- Files.exists():检测文件路径是否存在
- Files.createFile():创建文件。
- Files.createDirectory():创建文件夹。
- Files.delete():删除一个文件或目录。
- Files.copy():复制文件。
- Files.move():移动文件。
- Files.size():查看文件个数。
- Files.read():读取文件。
- Files.write():写入文件