【尚硅谷】JAVA基础-File类与IO流

一、File类

1.1 简介

在这里插入图片描述
在这里插入图片描述
相对路径:用普通的方法,则文件存于模块的文件目录下;用main方法,则文件存于整个工程的目录下。

1.2 使用

1.2.1 三个构造器

在这里插入图片描述/或者\都能作为盘符使用。
file1为绝对路径,file2为相对路径,getAbsolutePath方法是为了取得file2的绝对路径信息。
在这里插入图片描述

1.2.2 方法使用

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

二、IO流

(常用文件流和缓冲流,缓冲流是升级版文件流,能够更快传输文件数据)

2.1 简介

在这里插入图片描述
类别:(从不同角度进行分类)
在这里插入图片描述
字符流是用来处理文本类文件的,而字节流是用来处理图片、音频等非文本文件的。
在这里插入图片描述抽象基类为接口,都是声明其子类的对象,一般用访问文件那四个(节点流,也称为文件流)和缓冲流那四个(处理流),比如想要输入,则用FileInputStream或者BufferedInputStream。(缓冲流是用于文件较大的情况下,会比较快)
在这里插入图片描述

2.2 方法使用

2.2.1 节点流(文件流)

2.2.1.1 字符流

在这里插入图片描述
其中,len表示读取的字符的数量,括号里的0代表从数组第一个元素开始输出,直到第len个元素结束输出。

2.2.1.1.1 FileReader

输入流时文件一定要本身存在。
读写一般步骤:
在这里插入图片描述
在这里插入图片描述
**注意:**以上抛出异常的写法可能使得流资源无法关闭,因为在fr.read()方法进行时,有异常,则会跳至IOException中,而不会继续往下执行关闭操作,所以以上代码书写不够规范,规范的应该应用try catch finally来写(ctrl+alt+t快捷键),正确如下。
read()方法返回int值,表示每次读取的数据,需要转为char类型才能输出,读取全部数据后再次读取则会返回值-1,故while循环的终止条件是!=-1。
在这里插入图片描述
在这里插入图片描述
没有形参的read()方法只是简单输出一个一个字符,需用for循环才能将全部字符输入进来,而read(char[] cbuf)方法可以将读取的字符存储进char类型数组中,然后我们再把数组中的元素遍历出来即可。
len表示每次读入到cbuffer数组中的字符的个数。
**注意:**遍历数组时条件不是小于数组长度,否则显示的末尾数据会出现错误。
在这里插入图片描述
在这里插入图片描述

2.2.1.1.2 FileWriter

输出流时文件本身不在,则会直接创建;文件本身存在,对文件直接覆盖或者追加内容(所使用的构造器不同)。
在这里插入图片描述
一般步骤(与输入流相似):
在这里插入图片描述
在这里插入图片描述

2.2.1.1.3 注意点

在这里插入图片描述

2.2.1.2 字节流

在这里插入图片描述

2.2.1.2.1 FileInputStream与FileOutputStream

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

2.2.1.2.2 注意点

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

2.2.2 处理流

(此处处理流与节点流为一个层次,缓冲流与文件流为一个层次,只是节点流只有文件流,所以文件流=节点流)

2.2.2.1 缓冲流

对应关系:(缓冲流也分为输入与输出的字符流和字节流,与文件流里4个相对应,方法步骤等基本一致)
在这里插入图片描述
作用:提升文件读写的效率。
在这里插入图片描述**注:**readLine()方法的使用,在打印时加换行符。
在这里插入图片描述
在这里插入图片描述

2.2.2.1.1 BufferedInputStream与BufferedOutputStream

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

2.2.2.1.2 BufferedReader与BufferedWriter

在这里插入图片描述
在这里插入图片描述
**注:**关闭资源close()方法时,会自动刷新一次,将数据写入磁盘文件中,如果没有close()且没有flush(),代码运行成功后也不会看到文件中的数据。在循环中加入flush()方法,则每次写入的数据能及时看到,而不至于等程序运行完成后才能看到。
在这里插入图片描述

2.2.2.2 转换流

字符与字节之间的转换
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
输入流InputStreamReader需要源文件与输入到程序中的字符集一致,输出流OutputStreamReader则程序中的字符集与文件中的字符集(转换成你想要的字符集)可以不一致。
在这里插入图片描述

2.2.2.2.1 InputStreamReader

创建的是字节流FileInputStream对象,读取文件时运用转换流解码为字符,注意用try catch finally才是最正确的。
在这里插入图片描述
在这里插入图片描述

2.2.2.2.2 InputStreamReader与OutputStreamReader

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

2.2.2.3 数据流

数据流能做的事,对象流都能做,而对象流能处理的一些事,数据流不能处理。
在这里插入图片描述

2.2.2.4 对象流

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

2.2.2.4.1 非自定义类

应该用try catch finally解决异常

2.2.2.4.1.1 ObjectOutputStream

在这里插入图片描述

2.2.2.4.1.2 ObjectInputStream

在这里插入图片描述

2.2.2.4.2 自定义类

比如自己创建一个person类,声明类中属性等,运用对象流对person类实现序列化和反序列化。
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值