黑马程序员——java基础--IO流

来源:互联网 发布:关于网络的手抄报 编辑:程序博客网 时间:2024/06/06 19:04

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

一.概述

I就是Input,O就是Ouput,按流行分为输入流和输出流,按数据,分字节流,字符流,字符流是新版本后更新的。
字节流抽象基类:InputStream,OutputStream
字符流抽象基类:Reader,Writer
使用这些类的前提都是要导IO包,他们主要作用读写相关文件,所有功能都是围绕读写展开的,而且使用这些类都需要抛出异常,或者处理异常。

二.字节流和字符流

2.1Reader与Writer类
2.1.1
FileWriter类
FileWriter fw = new FileWriter(“Demo.txt”)创建一个该类对象,指定“Demo.txt”,如果默认目录有则覆盖此文件,没有则新建。
fw.write()通过该方法可以写入内容,此时内容还在内存当中
fw.fluse()当调用此方法,内容才从内存转到文件上,流可以继续操作
fw.close()调用此方法后,流资源关闭,此流不可在操作
2.2.2FileReader类
FileReader fr = new FileReader(“Demo.txt”)创建一个该类对象,指定默认目录下已经存在的文件,如果没有则产生异常。
fr.read()每次调用都只读一个字符,且自动往下读,当返回-1字符说明已经读到末尾,此方法可以接受一个数组参数,即把读到内容写到数组中去,然后可以变成字符串输出。
fr.close()调用方法关闭此流资源
做一练习对字符流进行应用:
这里写图片描述
2.2.2Reader与Writer类缓冲区
他们分别对应类:BufferReader、BufferWriter
作用:可以提高数据读写效率
使用:创建缓冲区类对象,这个对象接受对应的流对象。
BufferWriter字符写入流缓冲区
newLine(),使用write()方法调用,被写入内容自动换行,写完后要记得使用flush(),进行刷新。
BufferReader字符读取流缓冲区
readLine()对流对象每次按行读,缓冲区结束返回null,其原理实质是底层用到read()方法,readLine()这种方法的设计思想是装饰设计模式,其概念是当想对已有对象进行功能增强时,可以定义类,将已有对象传人,基于该功能将功能增强。装饰类比继承要灵活,避免了继承的臃肿,而且降低了类与类之间的关系,装修类于被增强原功能是组合结构。
2.2.3LineNumberReader
创建这个类的对象是接受字符输出流对象,他具有缓冲区相似的方法readLine(),不过输出每行会带有行数即可以看到第几行。
2.2InputStream与OutputStream类
2.2.1方法概述
字符流操作文档格式文件,而像图片、音乐、视频等文件就用到这两个类进行读写操作。他们同样的读写方法跟字符流相似,不过特别提下读入字节流available()方法,我们知道当带有自数组参数read()方法每次读取字符个数跟数组长度有关,而对一个文件操作我们实现不知道文件长度,所以定义数组的长度就变得不可能,但当调用这个方法返回的值就是定义缓冲区刚好的长度,避免循环,当然这个方法并不是对所有文件都通用,因为很多多媒体文件远远大于数组最大合法长度可以存储的量。
2.2.2BufferedInputStream与BufferedOutputStream缓冲区
字符流缓冲区结束是读null,而字符流缓冲区是-1,只有read()方法,没有readLine()方法。有时为了方便操作,会将字节流对象封装,然后转换成字符流,以便使用字符流特有方法如键盘录入:BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)),这样一次可以录入多个字节字符。
2.3流操作基本规律
通过两部来确定:
(1)明确源和目的
源即为输入流:InputStream Reader
目的即为输出流:OutputSteam Writer
(2)操作是否为纯文本
是,选择字符流,否,选择字节流.
源设备有:内存,硬盘,键盘
目的设备:内存,硬盘,控制台

三.IO流操作基本对象

3.1.File类
概述:它是将文件或者文件夹封装成对象,方便文件或者文件夹操作,File对象可以作为参数传递给构造函数。
可供选择使用的方法:
3.1.1.File.separator()代表目录分割”\”
3.1.2.创建方法:File对象.create.NewFile() 返回一个boolean,判断指定目录下有同名文件则不创建,没有则创建。 mkdir()创建文件夹, mkdirs()创建多级文件夹
3.13.删除:delete() 返回一个boolean,判断真则删除成功,假则删除失败。
deleteonExit()在程序退出时删除指定文件。
remove()将File类对象作为参数传递进去,返回一个boolean,真则删除OK,假则失败。
3.1.4.判断
boolean exists() 文件是否存在
isFile()
isDirectory()
isHidden()
isAbsolute()

3.1.5.获取信息
getName()
getPath()
getParent()
getAbsolutepath()
long length()
long lastModified()
3.2properties类
它是Hashtable的子类,具有Map的特点,存取的都是键值和键都是字符串,是同IO技术相结合的容器,可以用于键值对形式配置文件。通过load方法加载流对象。

四.其他流

1.Printwriter和printStrem
2.SequenceInputStream序列流,可以通过Vector操作多个File类对象,将其合并一个流输出,特别是当将切割完的文件进行复原。
3.ObjectStreamDemo 直接操作对象
没有方法的接口通常称为标记接口 例如:Serializable
静态不能被序列化
如果非静态成员也不想被序列化就加关键字 transient
这里写图片描述

0 0