Java全面解析IO流相关知识

IO流相关知识(File,字节流,字符流,特殊操作流(标准输入流,标准输出流,对象序列化与反序列化,properties与IO流结合))相关知识总结
前言

流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出

一、File
1.File类的概述和构造方法

D7447888-20C7-F216-AE98-38F611DDD856.png

A5BA1A0C-6C9D-EA82-5604-E64BD508F31D.png

通过如上的图相信对文件打的相关应用已经有了初步的认识,因为封装的不是真正存在的文件,仅仅是一个路径名而已,所以没有那个路径的文件也可以写,不会报错,将来是把不存在的转换为具体存在的。

2.File类创建功能

83F567A6-A936-9D97-F7B3-51477E859AB8.png

这里需要注意的是:不能根据目录来判断是创建的文件还是目录,而是通过调用的方法来判断的,路径那个只是名字而已,文件和目录的名字也不能是一样的

3.File类判断和获取功能

ED3A79D2-A0C7-443E-A19A-E0A32D2DEC40.png

4.File类删除功能

1148DE19-A09D-4B4F-49AC-00BA143774DC.png

注意:File的相关操作与字节流没有继承的关系,所以要删除文件的话还是的用File的删除功能才可

二、字节流
1.IO流的概述和分类

概述

79EFD860-F250-2A88-1158-9CC182BF7750.png

分类

D7A7A7F2-785A-AC6A-D010-0609E4E1266B.png

2.字节流写数据

C6DFACB9-77EE-9B4C-D267-C9726D56A83D.png

记得一定要释放资源

3.字节流写数据的两个小问题

字节流写数据如何换行

95654283-4BD5-F1E6-CAD3-9953AB3F49A4.png不同的操作系统的换行是不一样的

字节流写数据如何实现追加写入

6637FC2A-3FF1-D1E8-7C23-4876D811D05B.png

值得注意的是是在文件的后面添加,而原来的数据还是有的,所以在用的时候就要考虑一下是怎样使用自己的文件的

4.字节流写入数据假异常处理

5ED9BCD2-2F85-1CE7-44EF-964EF701BE86.png

就是简单的异常处理而已,如果不使用处理的话就抛出就可以了

5.字节流读数据(重点)

一次读一个字节的数据

7045705E-21A5-1A17-CFFA-11B3913C6C4C.png

标准的代码格式就是这样的

E4C94E17-E382-9F50-2F58-9BED514A85FA.png

一次读一个数组的数据

100EC24A-21C7-5877-C35C-413F220DB663.png

C0C0B73D-FD6B-7284-4F0F-001C9EF5A82A.png

字节流读数据其实很简单,这里需要注意的是字节流读数据的话可以有两种方法,至于使用怎样的方法就得取决于自己得使用就行了

6.字节缓冲流

561DF3AA-82D8-C21A-DBE9-87F1B131A9FF.png

74ED6009-9EE3-3F93-A1AE-9BDE14E54D36.png

7.如何选择怎样得数据读取呢?

4CE24CF7-44CF-906E-3AC5-36B6548C4162.png

从图中可以看出字节缓冲流得读取比基本得字节读取要快很多,如果要节省时间得话就可以考虑用字节缓冲流来进行字节流得读取

三、字符流
1.为什么会出现字符流?

70431E7F-35E3-537E-11C4-68D61F3FB8E2.png

所以他的底层操作的实质还是字节流

编码表

6A806D91-9CDB-D972-DB78-65113BE58B74.png

这里需要注意的是用的什么编码就必须用对应的解码,否则就会出现乱码的情况

2.字符串中的编码解码问题

53ADF005-E67C-EF0B-B669-BA3D163374E5.png

0661FBEB-17C7-3C5C-46CE-880D474AC2CA.png

3.如何实现解决编译解码的问题

1F19D724-AD4D-C6D5-97E8-5B54097836BC.png

其实写的时候是写在了缓冲区,并没写在文件里,可以刷新,也可以关闭流它会自动的刷新

代码理解

EA179287-E096-3175-D6DA-7EDC18A1976E.png

4.字符流写数据的方法

09E579AE-3133-E8E7-EFA8-9099B7E083E1.png

A0DECA6A-0FF7-53BF-3CD5-4EBF4BCDA00E.png

5.字符流读数据的方法

DD2B75A4-D2D7-A8E1-D177-EBE112E98282.png

FE1A0E06-4746-F8B2-924F-306805F93606.png

字节流与字符流的读数据的思想是一样的只不过一个是字符,一个是字节而已

6.字符流复制文件

其方法和字节流的方法一样,只是一个是字节一个是字符而已

方法一:一个一个的字符进行的复制

方法二:一个字符数组一个字符数组的复制

准换流

OutputStreamWriter 他又一个子类是:FileWriter

InputStreamReader 它有一个子类是: FileReader

我们在复制文件等相关操作的时候可以用他的子类进行操作,书写更加的简单,但是,在进行编码问题解决的时候还是得用转换流才可以

7.字符缓冲流

5234A954-7328-FC16-848E-CB7B2BAB0EB5.png

19F81BFC-6C9E-CE03-BA72-1118B367AB77.png

字符缓冲流的特有功能

93CFD40D-18CE-CB8D-737B-3274B363A53B.png

那么可以做什么呢?

我们可以通过其中特有的功能进行文件的复制等

需要注意的是readline只是读的是内容,不读其他的

8.字节,字符流小结

(此时有个使用的问题就是用哪儿文件的读取就写哪儿,写在一起容易出问题,还有就是一定要释放资源)

字节流

308CF8A3-72B7-6717-6030-2F484C97D26B.png

字符流

7998324B-A00F-1A76-80F0-1F88E721E5F5.png

关于乱码的问题

个人认为出现乱码是因为如果用的是字节流的话用char来强制转换显示的话就是只有其中的一部分并没有把一个汉字的那个文字表达组如(【-1,23,36】)表达完整,但是如果用new String()来显示的话会表达完整(可能是里面有相应的方法,具体不清楚,知道就行了),如果用的是字符流的话就是用的默认的编码以及你相应要求的编码来表达,所以就不会出现乱码的问题了

9.复制文件的异常处理

22943EC7-03D3-1660-0676-9D2236AB718F.png

26F6F238-8DCE-FC6D-87DD-BDA58B3D199C.png

四、特殊操作流
1.标准输入流

7DDEFEC0-EB4D-0A05-8E8F-49907CE41E43.png

19A03578-2489-DD4C-4D88-863D1E25BA7D.png

2.标准输出流

BD843F67-F91D-F1E6-DCEE-F2619E6D7F8E.png

A5F26C2A-B6EC-07EC-34FB-4B56DD97D1FF.png

3.打印流

字节打印流

5C40FD10-500A-C842-9755-45F56F1DFA4D.png

4E5BD248-CC31-C5EF-05CD-720A30BF391E.png

字符打印流

AEA606E3-5855-9780-1A1A-E980CFF15BBB.png

FB20705D-0E17-5882-82EA-19C81B54CD26.png

4.对象序列化流与对象反序列化流(它是基于字节流上的)

对象序列化流

E07A8310-65AB-D406-EE0C-3BCECCF54CD6.png

0BA78657-F594-1E72-F0BC-1B682768AA80.png

对象反序列化流

BAF830FB-D715-9E4C-2487-DCF5CD143AEA.png

51BD7F9A-FCFC-3FEC-EE56-C9FA550203DD.png

5.解决对象序列化流的三个问题

FD22C149-4962-2F57-0C3D-33E432F71786.png

EC194C0A-4755-47D1-4B8E-DF470BE948F6.png

6.Properties

792A3E20-061C-18C7-0361-9AA59E4991C5.png

代码理解(properties作为map集合的使用)

579E67B1-DB5A-60D2-FA01-4DBB845D663F.png

properties作为集合特有的方法

2D52F952-8D19-B803-814E-48882C14DD67.png

第一个是写数据进入集合

第二个是根据键得到值

第三个是得到键得集合

8FC30F07-187B-B879-3211-CB28D8259AB8.png

Properties和IO流结合的方法

集合数据写到文件

87494B3F-4D9C-7E60-B9AD-64CC995A2C52.png

文件写到集合

B1B411A6-DF35-FB80-10B0-BD5831CF4A11.png

总结

IO流其实很简单,重点是要掌握其中的字节流读写方法,以及字符流的读写方法和Properties与IO流结合的进行使用。

收藏 (0)
评论列表
正在载入评论列表...
我是有底线的
为您推荐
    暂时没有数据