我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容。
前言:此随笔主要是Java基础中的基础,相信大家对这方面肯定有着自己的理解和认识,具体详解可以参照万能的baidu,有的我就一笔带过,希望在我的学习之路上能够有大牛进行指导,也有更多的小伙伴共勉。
1.IO流
这里的IO是也就像Input 和 Output 的简称,也可以比作文件的读写操作是内存和硬盘之间的交互了。
这里要学的是字符流和字节流的输入和输出以及相关的优化操作和具体的细节操作。需要注意的是创建流对象在使用之后一定要关闭对象的使用,为避免不必要的资源浪费。
2.字节流
一切文件数据皆为字节流,也就是说我们所用到的很多文件等等都是以二进制的形式存在的,所以在操作的过程中要记的无论是什么文件底层都是以二进制数据。
·OutputStream 这里是字节输出流,也是相当于将指定的字节信息写入到文件中去。
常用的方法:
·close 在使用流之后要释放资源这里是很重要的
·flush 刷新此输出流并强制任何缓冲的输出字节被输出
·write 写入方法 可以传入的参数可以是字节,可以是字节数组,也可以是指定的字节输出流
构造字节流对象的方法:
·通过File创建文件输出流以写入有指定File表示的文件
·通过创建文件输出流以指定名称写入文件
这里的write方法写入字符串时要使用getbytes方法将字符串转为字节数组写入
但是在每次写入数据时程序运行都会清空文件中的内容,
这里就要用到FileOutputStream的构造方法来创建流,这里的传参第一参数和上文一致,但是第二个传参是布尔值,将值写为true表示追加数据,改为false表示清空数据重写。
在Windows中的换行是\r\n 用来加以换行否则直接紧跟之前存入的字节文件。\r return回车 \n newLine 换行,不同的操作系统换行不同。
·InputStream 这里是字节输入流,也是相当于将指定文件的内容读取出来。
常用的方法:
·close 关闭流的方法以释放资源
·read 传入的参数不同方法不同,当传入空参时,是从输入流读取到下一个字节,传入的是byte数组时,是将输入流的部分传入到数组中读取。
这里也要用到文件入流FileInputStream来进行读取操作
构造方法:
·通过打开与实际文件的连接创建一个FileinputStream流,然后通过文件系统的File对象 file命名;
·通过打开与实际文件的连接创建一个FileinputStream流,然后通过文件系统的路径名直接命名。
流的关闭规则:先开后关,后开先关。
3.字符流
当使用字节流的时候会遇到一个问题就是当遇到中文字符的时候,可能会显示不完整的字符,因为占用的字节空间不一样,这样就需要使用字符流来弥补这一个问题。
·Reader字符输入流
常用的方法:
·close 关闭字符流,在使用流之后为了避免不必要的浪费,所以一定要关闭
·read 传入的参数不同功能也不同,和字节流大同小异也是一个单字符,一个字符数组。
FileReader是Reader抽象方法的子类
构造方法:
·FileReader 创建一个新的FileReader 给定要读取的对象
·FileReader 创建一个新的FileReader 给定要读取文件的名称
当创建一个流对象时必须要创建一个文件路径。
这里和字节输入流一样在读取文件对象时遇到-1则读到了文件末尾。这样循环读取每个字符,一般用 while表示当判断的数组值为-1时结束循环。
这里用到了String类中的方法,读取String内的长度的个数,可以避免数组最后读取的字符个数小于定义的数组长度,避免出现-1位重复读取的问题。
·Writer字符输出流
常用的方法:
·write 这里可以写入单个字符,字符数组,部分字符串的长度,写入字符串,写入部分字符串长度
·flush 强制刷新流的缓冲
·colse 关闭流
FileWriter是writer抽象方法的子类
构造方法和创建输入流的方法如出一辙,为了减少时间的浪费,大家可以类比一下。
特别注意的是在写入的过程中由于我们未使用close方法,数据只是被保存到了缓冲区,为了能够进行保存并再之后再次写入,需要使用flush方法来刷新缓冲区,这样流对象就可以继续使用,如果不使用的话就要用到close关闭流释放资源。
需要注意的是字符流只能作用于文本文件,不能作用于图片等其他非文本文件。
·我在学习和在上面描述的过程中发现了一个问题就是 IO流写入的子类 参数传入true和flush功能有什么区别。
这里的续写是两个概念,第一个传入true续写是在同一个流对象操作过程中,对文件的续写,
而flush刷新功能是在关闭流之后再次访问文件去续写之前的内容,就是一个文档没有创建,提前进行了补充,一个是文档已经创建,为了更好的完善内容对文档进行的补充。
4.IO异常处理
对于异常抛出我一直没有提到过,为了方便入门可能就是光了解了流对象,又是仅仅是单纯的抛出throw操作,但是在实际开发中需要用到try...catch...finally进行具体的操作,这样创建流对象的操作就要放到try后面的括号中,而花括号的内容,则是正常的操作,在finally中进行流对象的关闭操作。这是JDk7之后的版本操作。
但是在JDk7之前的流操作需要在try 的花括号中进行流对象的创建还有文件的操作,在最后finally中需要对流对象是否为空进行判断来确定是否关闭流对象。
5.属性集
在Hashtable中 Properties继承了它的属性集,来表示一个持久的属性集,它使用键值结构的方式存储数据结构,每个键及其对应的值都是对应的字符串。
构造方法是一个空的属性列表用来创建一个空的属性列表。
基本的存储方法是:
·setProoerty 设置一对属性
·getProoerty 使用此属性列表的属性 传入的是key值
·StringPropertyNames 获取所有键的名称集合
而如果与流相关的集合为了家在文本中的信息到属性集需要用属性集对象调用load方法加载文本信息到属性集中,然后在进行遍历集合打印。