IO流 文件得读取与写入

									IO输入输出流

字节: (输入)inputsterm (输出)outputstream
字符: reader writer
In:把文件读入进来
Out:把自己的东西写入文件里边去。
Reader:把东西读出来;
Witer:把东西写进去。
字节流 (FileInputStream)
字节输入流:读入文件到内存中进行使用,是先到磁盘里去把文件读入到内存中,然后进行使用,就可以加载了。
1.1 怎么构造对象:
IO流 文件得读取与写入_第1张图片
继承自输入流。
FileInputStream(File file)
FileInputStream(File file)
通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
FileInputStream(String name)
通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。
这两个创建对象得方式是:第一个传入一个文件得路径。
第二个:传入一个要读取得绝对得路径。(要读得该文件得绝对路径)
注意:IO流读取中很多对象创建时自带异常*(选择抛出)
常见得集中异常:
空指针异常; 索引越界异常; 传入参数不合法; 等等之类得
读取文件:
第一步:构造一个文件,得到一个绝对路径。
在这里插入图片描述

第二部:
传入一个需要读取得文件。(传入一个路径)
IO流 文件得读取与写入_第2张图片

注意:两个对象得路径不是一个路径。(对象不同得)
2 读取文件方式一
Read(); 如果到达文件末尾则返回-1
把文件里边得类容读到内存当中来;
int read()
从此输入流中读取一个数据字节。
该方法只能读取到文件中得第一个值,是一个一个读得。
读出来得值默认为奥兹玛值,需要转化成char类型得值,进行收取。
注意:从磁盘里边把资源读出来之后要关闭。 对象.close
IO流 文件得读取与写入_第3张图片

我们不知道一个文件里边有多少个字节,所以采用while循环来一直读下去。
读:reader 有一个特性是,文件达到末尾就返回-1.
If()判断条件是,该文件如果为-1就表示读到尾部了,直接结束这个循环: break;
读了之后我们还需要取出来,取出来之后我们得到得是一个奥兹玛值,需要转化为char字符来查看更加直观。
在这里插入图片描述

如果不转换,那么就看不到文件里边得东西到底读出来没有
3 读取文件得方式之二
int read(byte[] b)
从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。
IO流 文件得读取与写入_第4张图片
我们同样得只是把读取文件得个数设置为一次读取两个而已,所以每次打印都只会打印两个。
-1 代表去读文件已经到达末尾。如果到达末尾得话我们需要做的就是结束这个循环。
IO流 文件得读取与写入_第5张图片
那么问题来了:我们一次读取两个文件得话,文件里边得内容个数和我们读出来得重复了。
怎么解决???????
IO流 文件得读取与写入_第6张图片
如果我们用数组取存放得话,每次存放的方式都是用索引存放,那么每次都是在索引为 0 1的位置存放。
在这里插入图片描述
这个代码出现的问题;
IO流 文件得读取与写入_第7张图片
String 开始解码:
意思就是从String数组的哪一个位置开始
在这里插入图片描述
从这个数组的0索引开始解码,需要解码多少个,后边就跟这个数组的长度。
String(byte[] bytes, int offset, int length)
通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String。
用来解码的;
3 读取文件的方式之三
IO流 文件得读取与写入_第8张图片
在这里插入图片描述
Len————一口气我读几个,文件里边你想要读几个几个,显示的就是读出来的几个。
Off----------------从那个起始位置开始放,这儿是索引哈,比如我从0的索引位置开始读就OK了;
第一个:放入需要读取的数组,
在这里插入图片描述
注意:

就是后边的索引和读取的个数不能大于数组传入的长度。
在这里插入图片描述
比如下边我要读取byte数组,那么从索引的位置到一次读多少个不能大于这个传入的数组长度。 切记
字节流:按照char字符来读取的,char类型有一些中文可以读出来,一个字节的。汉字读的话会乱码。 字节流读中文文件会乱码。只能用字符流来读取。
使用的话还是第一种比较适用。
二 字符流(输入流)
1.继承自读的文件
IO流 文件得读取与写入_第9张图片
构造方法: 如何取创建对象
FileReader(File file)
在给定从中读取数据的 File 的情况下创建一个新 FileReader。
FileReader(FileDescriptor fd)
在给定从中读取数据的 FileDescriptor 的情况下创建一个新 FileReader。
FileReader(String fileName)
在给定从中读取数据的文件名的情况下创建一个新 FileReader。
读取文件就是输入:
在这里插入图片描述
构造对象:传入一个路径或者字符串的路径。
第二部;调方法读取文件
IO流 文件得读取与写入_第10张图片
本身没有方法,去父类调方法出来使用。
因为它继承自inputStreamReader读取的方法的。还是调用read()方法。读取
在这里插入图片描述
读取文件的结果为奥兹玛值,直接转换成char字符。
1 字节输出流:(FileoutputSteam) 字节输出流
IO流 文件得读取与写入_第11张图片
字节输出流:
第一步:找出构造方法构造对象,传入一个需要传入的文件或者文件夹
FileOutputStream(File file, boolean append)

创建一个向指定 File 对象表示的文件中写入数据的文件输出流。FileOutputStream(String name, boolean append)

创建一个向具有指定 name 的文件中写入数据的输出文件流。
多了两个布尔类型的值:怎么用
IO流 文件得读取与写入_第12张图片
文件存在的话,由true和false来决定是否追加和覆盖。
在这里插入图片描述
这儿我们重新修改了文件,就是文件不存在了。
在这里插入图片描述
自动创建了。
在这里插入图片描述
这儿我传入的97是一个哈希码值,转化成字符串就型了。
这儿文件修改值得话自动被覆盖了。
修改路径得话:
在这里插入图片描述
修改路径直接报错。
FileOutputStream(String name, boolean append)

创建一个向具有指定 name 的文件中写入数据的输出文件流。
有参的话,false直接覆盖,true的话追加。在文件后边加入向要传入的值。
在这里插入图片描述

有参的话true直接追加,false的话直接被覆盖。
在这里插入图片描述
IO流 文件得读取与写入_第13张图片
将字符串转化为char字符的方式。
再调用String里边的返回值为byte的方法,返回一个byte,加入三个参数。

2 字符输出流:(FileWriter)
IO流 文件得读取与写入_第14张图片
字符输出流。
FileWriter(File file)
根据给定的 File 对象构造一个 FileWriter 对象。
FileWriter(File file, boolean append)
根据给定的 File 对象构造一个 FileWriter 对象。
FileWriter(FileDescriptor fd)
构造与某个文件描述符相关联的 FileWriter 对象。
FileWriter(String fileName)
根据给定的文件名构造一个 FileWriter 对象。
FileWriter(String fileName, boolean append)
根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
基本就是创建对象调用方法。
Boolean append:
注意,文件存在的话会被覆盖
文件不存在的话会自动创建
路径存在的话就根据true和false来判断
路径不存在就报错。
FileWiter();构造对象传入一个文件地址。 true追加,false是覆盖。
如果字符流中文往字节流里边追加,会乱码。

三 转义流

在这里插入图片描述
IO流 文件得读取与写入_第15张图片
在这里插入图片描述
InputStreamReader(InputStream in)
创建一个使用默认字符集的 InputStreamReader
构造方法:
IO流 文件得读取与写入_第16张图片
字节流输入进来。

你可能感兴趣的:(学习)