java中IO流详解

1. File类

创建File对象
  • 注意:
    • File是一个代表文件或目录(文件夹)的类
    • 创建File类,并不是真的创建
    • java并不会对该路径名去检测,仅仅只是根据这个文件名创建一个对象
  • 构造方法创建对象:只是对文件的一种描述,并不会去做检测创建真正的文件
    • 方式一:
      在这里插入图片描述
    • 方式二:
    • 方式三:
创建真实文件
  • 示例
    在这里插入图片描述
    解释:异常分为编译时异常和运行时异常,运行时异常可以不必在代码中声明,由JVM自动检测。但编译时异常必须声明,以便使得JVM机知道可能会发生这个异常,如果在运行过程中发生了这种异常,JVM机要进行捕获处理。JVM机难道不能自动检测编译时异常,省得我们去声明。但这样岂不是增加了JVM负担
    在这里插入图片描述
    声明之后,如果创建失败,JVM自动捕获异常。而其他编译时异常,没有用到相应的类,没有声明,JVM也就不会去管。
  • 注意
    • 这个方法在执行时候,会依赖于构造方法创建的对象的描述信息,去进行检测
    • 如果该方法创建成功之后,会返回true。如果文件已存在,返回false,不会重复创建
    • 该方法创建不了目录(文件夹),如下图。
      在这里插入图片描述
创建目录
  • 创建单级目录(仅仅只能是单级)
    在这里插入图片描述
  • 创建单级目录和多级目录
    在这里插入图片描述
  • 删除目录和文件
    在这里插入图片描述
    在这里插入图片描述
    注意:这个删除是彻底删除。必须精确指明要删的目录,如果目录下有任何东西,都会删除失败。
遍历目录

在这里插入图片描述

删除指定目录的所有文件
  • 注意:delete()方法并不能删除含有子目录或文件的指定目录。那么如果,想要删除D盘下的所有文件,必须一一指定删除,这样做显然很费劲。以下代码用递归的方式对指定目录进行了全部删除,删除后不可还原,慎用!!!
    在这里插入图片描述
计算指定文件夹下的指定后缀名文件的个数

在这里插入图片描述

文件过滤器的使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

File类的API方法

2. IO流

IO流的定义
  • 以内存为参照物
IO流的分类
  • 按传输方向分为:输入流,输出流
  • 按照传输形式:字节流,字符流
  • IO四大基本流
字符流字节流
输入流ReaderInputStream
输出流WriterOutputStream

注意:这对应的四个类全是抽象类,为什么是抽象类?因为还有一个条件没有确定,该条件没有确定,该条件就是应用场景。也就是数据获取的位置(硬盘,内存,网络),不同的场景,所对应的获取方式不同,而这四大基本流只是对不同的方式的共性的抽象。

3. 字符流

FileWriter类的使用
  • 确定场景:硬盘的一个txt文件,所以使用FileWriter类
    在这里插入图片描述
  • 创建对象,创建通道
    注:File文件类是IO流的前提,比如FileWriter()中的参数需要是文件。
    在这里插入图片描述
  • 写数据
    • 如何解决以下问题
      在这里插入图片描述
    • fw就是两者之间的通道,传输的数据的过程中还用到了缓冲区,缓冲区好比是运输货物的船,等船装满了,再运输到对岸。
      在这里插入图片描述
  • 所以引发了一个问题,如果数据没有装满就会滞留在缓冲区
    在这里插入图片描述
    该图执行之后,文件中并没有写入。原因是缓冲区没装满
  • 缓冲区清空的两种方式,close将通道关掉,也就是那个fw引用
    在这里插入图片描述
写法规范

在这里插入图片描述
在这里插入图片描述

FileReader
  • 这里不会去检测,创建文件,如果没有该文件,就会报错
    在这里插入图片描述
快速入门

在这里插入图片描述
在这里插入图片描述
遍历文件:
在这里插入图片描述
注意:一个一个的读,和FileWriter一对比,就知道,FileReader没有缓冲区。但缓冲区很方便,一次性能读写很多数据,所以我们要自己建一个缓冲区,该缓冲区用数组来做。
在这里插入图片描述
注意:数组的大小很影响文件的读速度,但并不是缓冲区越大越好,因为数组的创建和销毁也是需要时间的,读的时间和这部分时间要到最低才可以

4. 字节流

FileOutputStream
  • 往一个txt文件中写入数据(以字节传输)——字节输出流,文件FileOutputStream
    在txt文件中,当你以字节进行传输时,txt文件会把字节转换成字符的形式
快速入门

在这里插入图片描述

  • 如果先运行一遍以上程序,再运行一遍,那么后者会将前者覆盖
  • 大部分字节流没有缓冲区
追加操作
  • 只需要在构造参数中,多加一个参数即可
    在这里插入图片描述
  • 字符输出流也是同理
    在这里插入图片描述
FileInputStream

在这里插入图片描述
在这里插入图片描述

复制操作

在这里插入图片描述
在这里插入图片描述
注意:无论是文件字节流还是文件字符流,只要是输出流(FileWriter,FileOutputStream),即使没有文件存在,也会检测创建文件。但是输入流(FileReader,FileInputStream)不会,如果文件不存在会报异常
,

5. 缓冲流

  • 我们发现FileWriter底层自带缓冲区,而FileReader没有缓存区,每次都需要我们用一个数组来自建一个缓冲区。而字节流也一般都没有缓冲区,无论是读还是写,都需要自建数组缓冲区。效率很慢,因此,java中就出现了缓冲流这一概念。
  • 字符流和字节流都有其对应的缓冲区
BufferedReader

在这里插入图片描述

在这里插入图片描述

  • 注意:BufferedReader是读完之后,再读就返回空
    在这里插入图片描述
  • 缓冲流这里使用了装饰者模式
  • 缓冲流还有:BufferedOutputStream,BufferedInputStream,BufferedReader,BufferedWriter(虽然自带缓冲区,但提供一个更大的缓冲区)

6. 转换流

OutputStreamWriter
  • 将字符转换成字节,因为输出是将程序中的字符串输出,所以往外输出只能是字符流转换字节流
    在这里插入图片描述
InputStreamReader
  • 将字节流转换成字符流,因为输入底层一定是字节流,所以读入时只能是字节转换字符流
    在这里插入图片描述

7. 系统流

  • System.out:字节输出流
  • System.err:字节输出流
  • System.in:字节输入流
  • 系统流都是静态的,全局唯一,用的是同一个,所以不能关
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值