之前我们建立一个文件的时候可以使用File类来创建,但是文件或者目录创建完毕之后怎么对其中的内容进行修改呢?这个时候就要使用流来进行文件内容的操作
Java IO流的原理
IO流就是为了让文件内部与程序交互的
IO流分为输入流和输出流
输入(Input)
输入input:读取外部数据(磁 盘、光盘等存储设备的数据)到 程序(内存)中。
输出(output)
输出output:将程序(内存) 数据输出到磁盘、光盘等存储设 备中。

何为输入输出:
输入输出要看站在谁的角度 ,要是站在内存/程序的角度 站在程序/内存的角度看是写入数据还是读取数据
当网络或者文件向程序/内存中写入数据就是input(输入)
当外部的网络或者文件向程序/内存中读取数据就是output(输出)
流的分类
?按操作数据单位不同分为:字节流(8 bit),字符流(16 bit)
?按数据流的流向不同分为:输入流,输出流
?按流的角色的不同分为:节点流,处理流
一: 流的分类
1: 操作数据单位: 字节流 字符流
2: 数据的流向 :输入流 输出流
3: 流的角色: 节点流,处理流

流处理的选择
非文本的: 图片或者语音等按照字节流处理(字节流是底层0101) 文本的: 按照字符处理(char:a b c )
本身的底层有节点流(字节流或者字符流)处理数据的时候可以在其外部包裹一层处理流来加速其传输

流的体系结构
体系结构
抽象基类 节点流(或文件流) 缓冲流(处理流的一种)
InputStream FileInputStream BufferedInputStream
OutputStream FileOutputStream BufferedOutputStream
Reader FileReader BufferedReader
Writer FileWriter BufferedWriter
流的创建与使用
流创建的步骤
1: 创建File对象,需要创建File对象来指定要操作的文件 2: 创建流,把要操作的文件提供给具体的流 3: 文件数据的操作,使用流对具体的文件内容中的数据进行输入输出的操作 4: 流的关闭,虽然Java本身有垃圾回收机制,但是对于物理连接,如:数据库连接,输入输出流,Scocket连接时无法回收关闭的
eg:
Read的操作
File的实例化确保文件存在
FileReader流的实例化
读入的操作
流资源的关闭
Writer
1: 提供File类的修对象,指明写出到的文件(确定要出书的文件)
2: 提供具体的流操作对象,并将要操作的文件给流对象
3: 数据的输出
4: 流的关闭
流在具体操作文件的注意点:
说明点: Read: 1: read()的理解:返回读入的一个字符,如果达到文件末尾就会返回-1 2:异常的处理: 为了保证流资源一定要关闭 ,要使用try{}catch{}finally{} 在抛出异常的时候尽量不要用throw因为在中间执行流的操作还没有关闭流的时候报错,那么就会造成内存的溢出之类的,所以要用try{}catch{}finally{} 3: 读入的文件一定要存在,否则就会报:FileNotFoundException Write: 1:如果写出的操作文件不存在不会报错,并不会报异常 2: File对应的硬盘文件不存在,在输出的过程中会自动创建此文件 File对应的文件存在: 如果流使用的构造器:FileWriter(file,false)/FileWriter(file)是对原有文件的覆盖 如果流使用的构造器:FileWriter(file,true)/FileWriter(file)不是对原有文件覆盖,而是对原有文件的追加
.
原文:https://www.cnblogs.com/zhaoyunlong/p/13094995.html