您的位置:首页 > 职场人生

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

2015-11-25 17:47 405 查看
——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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java