IO流 文件得读取与写入

									IO输入输出流

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

第二部:
传入一个需要读取得文件。(传入一个路径)
在这里插入图片描述

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

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

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

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

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

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

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

有参的话true直接追加,false的话直接被覆盖。
在这里插入图片描述
在这里插入图片描述
将字符串转化为char字符的方式。
再调用String里边的返回值为byte的方法,返回一个byte,加入三个参数。

2 字符输出流:(FileWriter)
在这里插入图片描述
字符输出流。
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是覆盖。
如果字符流中文往字节流里边追加,会乱码。

扫描二维码关注公众号,回复: 5688604 查看本文章

三 转义流

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
InputStreamReader(InputStream in)
创建一个使用默认字符集的 InputStreamReader
构造方法:
在这里插入图片描述
字节流输入进来。

猜你喜欢

转载自blog.csdn.net/dkwjava/article/details/88858486