按流向分:可以分成读和写
按类型分,可分为字符流和字节流
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jy0MFc2q-1659543003407)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bf40da15d11b4e43a6cc406bc7394e9c~tplv-k3u1fbpfcp-watermark.image?)]](https://1000bd.com/contentImg/2022/08/09/170221583.png)
//1、创建字节输出流对象
FileOutputStream fileOutputStream=new FileOutputStream("a.txt");
//2、写出数据
fileOutputStream.write(97);
fileOutputStream.write(98);
fileOutputStream.write(99);
fileOutputStream.write("罗兆你要自强".getBytes(StandardCharsets.UTF_8));
//3、关闭流,释放资源。
fileOutputStream.close();
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WEcd2Ksj-1659543003408)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/155008c0fd344a1ba19e748da09892a9~tplv-k3u1fbpfcp-watermark.image?)]](https://1000bd.com/contentImg/2022/08/09/170221864.png)
4.1、FileOutputStream的构造方法
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f3lJleZk-1659543003408)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/906072a373ee4182b1b53b9ec8f8528f~tplv-k3u1fbpfcp-watermark.image?)]](https://1000bd.com/contentImg/2022/08/09/170222115.png)
4.2 FileOutputStream的成员方法
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lcHBxgTb-1659543003409)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3c9ec3963adf4220bbdae9d4052982ef~tplv-k3u1fbpfcp-watermark.image?)]](https://1000bd.com/contentImg/2022/08/09/170222289.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DiUnrO6F-1659543003409)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/78666df5ca7a42469f8527b43e503280~tplv-k3u1fbpfcp-watermark.image?)]](https://1000bd.com/contentImg/2022/08/09/170222608.png)
4.3 字节流写时候-换行操作
window:系统下 \r\n、\r、\n 3种方式(推荐使用\r\n,因为另外2种换行符可能不适用于Win7、Win8)
mac:\r
linux:\n
5.1 一次读取一个字节
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r9kLdch6-1659543003410)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/304a5de4145a44a1b8bc7c993acb6db1~tplv-k3u1fbpfcp-watermark.image?)]](https://1000bd.com/contentImg/2022/08/09/170222939.png)
5.2 构造方法
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tn76gb14-1659543003410)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bfadb3e8a4564eb3907cf4015b39ff18~tplv-k3u1fbpfcp-watermark.image?)]](https://1000bd.com/contentImg/2022/08/09/170223286.png)
5.3 返回-1说明读取到行尾了,所以只要返回的不是-1就可以继续读。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lpq6TPHZ-1659543003410)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f59f75469f024ba78da47522215da434~tplv-k3u1fbpfcp-watermark.image?)]](https://1000bd.com/contentImg/2022/08/09/170223583.png)
5.4 字节流循环读取
FileInputStream fis=new FileInputStream("a.txt");
int i;
while ((i=fis.read())!=-1){
System.out.println(i);
}
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bqfQ9A3K-1659543003411)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1476aeb434b1476aa33dd09b4b372496~tplv-k3u1fbpfcp-watermark.image?)]](https://1000bd.com/contentImg/2022/08/09/170223834.png)
5.5 数组拷贝 读取-写出
FileInputStream fis=new FileInputStream("D:\learing\test.mp4");
FileOutputStream fos=new FileOutputStream("test2.mp4");
byte[] bys=new byte[1024];
int len;
while ((len=fis.read(bys))!=-1){
fos.write(bys,0,len);
}
fis.close();
fos.close();
5.6 根据数组的长度,决定一次读取多少字节,并把读取到数据存到数组中。
5.6.1
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2kvYRGDh-1659543003411)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d7039304b8b94cc4b83dd556e6b63647~tplv-k3u1fbpfcp-watermark.image?)]](https://1000bd.com/contentImg/2022/08/09/170224090.png)
FileInputStream fis=new FileInputStream("a.txt");
byte[] bys=new byte[3];
int read = fis.read(bys);
System.out.println(read);
System.out.println(Arrays.toString(bys));
5.6.2
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nz3nTrvv-1659543003411)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/95814b5b066e4fb3b01fb88a272e3064~tplv-k3u1fbpfcp-watermark.image?)]](https://1000bd.com/contentImg/2022/08/09/170224592.png)
FileInputStream fis=new FileInputStream("a.txt");
byte[] bys=new byte[3];
int len;//记录读取数据的位置
while ((len= fis.read(bys))!=-1){
String str=new String(bys,0,len);
System.out.println(str);
}
字符流=字节流+编码表
当我们调用read 方法 读取字符的时候
实际上,底层会先读取到(一个字节)
判断这个字节是否为负数(中文字符,字节的第一个,肯定是负数)
你:-74 -73 -72
第一次读取到的是-74,就可以判断,读取的内容是中文了
是中文的话,再结合平台默认编码表,决定继续读取多少字节
UTF-8,读取3个字节—>转换为中文的汉子
如果读取到的字节,是正数,就直接读取一个字节,然后转换。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v5F7f6P7-1659543003412)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3d565c27297640698dfb9acf53f54ebd~tplv-k3u1fbpfcp-watermark.image?)]](https://1000bd.com/contentImg/2022/08/09/170224834.png)
6.1 拷贝一个大文本文件
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3AS0nMRp-1659543003412)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/23a1911a3aba4959ab0e5cd68095b133~tplv-k3u1fbpfcp-watermark.image?)]](https://1000bd.com/contentImg/2022/08/09/170225012.png)
7.1、创建的数组类型不一样
7.2 字节流写出的数据,就算没有关闭流,数据也会写出。字符流不会。
7.3 字符流写出数据可以直接写出字符串。
7.4 字符流只有调了close关闭流后,或者flush 才会把缓冲区刷出。
flush把数据从缓冲区刷到文件中后,还可以继续进行刷出。
但是close后,就不能再进行写出了。
以上内容,来自我稀土掘金博客。
链接: 稀土掘金