黑马程序员——IO流
2014-09-22 19:36
218 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
2.java对数据的操作是i通过流的方式
3.java用于操作l流的对象都在IO中
4.流按操作数据分两种:字节流和字符流
5.按流向分:输入流、输出流
字符流的抽象基类;Reader、Writer
既然IO流是操作数据的,那常见的体现形式:文件
IO异常处理方式
使用try{}catch(){}
对已有数据的续写例子:
第二种读取方式:
对应类:BufferedWriter、BufferedReader
缓冲区结合流才可以使用。在流的基础上对流的功能进行了增强
缓冲区的出现是为了提高流的操作效率而出现的,所以在创建缓冲区之前,必须有流出现。
缓冲区中还提供了一个跨平台换行符:newLine();
readLine():读一行,当末尾时,返回null。
优点:
便于对文本数据获取,返回时,孩子返回回车前内容不返回任何行终止符
原理:
无论读一行还是读取多个字符,其实最终都是在硬盘上一个一个读取,所以最终使用的还是read方法。
装饰设计模式:
当想要对已有对象进行功能增强是,可以定义一个类将已有对象传入,基于已有对象功能,并提供加强功能,那么自定义的该类就称为装饰类
装饰类通常会通过构造方法接收被装饰的对象,并基于被装饰的对象的功能,提供更强的功能。
装饰模式比继承灵活,避免了继承体系臃肿情况,降低了类间关系。
装饰音增强已有对象,具备功能和已有的好似相同的只不过提供了更强功能,所以装饰和被装饰类通常都是属于一个体系的。
LineNumberReader就是BufferedReader的装饰类
字符流
流操作的基本规律:
三个明确:
1.明确源和目的
2.操纵数据是否纯文本
3.体系明确后再明确用对象
通过设备区分:源:内存、硬盘、键盘
目的:内存、硬盘、控制台
提高效率加入缓冲区
扩展
想要把录入数据按指定编码表存数据于文件中,转换流可以指定编码表
记住,转换流什么时候用?
通常涉及字符编码转换时用。
常见方法:
1.创建:
creatNewFile():返回boolean,在指定位置创建,如果存在不创建
mkdir():返回boolean,常见文件夹一级文件夹
mkdirs():返回boolean,常见多级文件夹
2.删除
delete():返回boolean,
deleteOnExit():返回void,退出时删除指定文件
3.判断
boolean canExecute():是否可执行
boolean exists():文件是否存在
boolean isDirectory():判断目录
boolean isFile():判断文件
boolean isHidden():是否隐藏
boolean isAbsolute():是否抽象文件不存在也判断
4.获取信息
String getName():名字
String getPath():路径
String getParent():父目录:返回绝对路径中的父目录,如果相对路径返回null
String getAbsolutePath():
Long lastmModified():返回最后修改时间
Long length():文件大小
5.跨平台分隔符:“+File.separator+“
6其他
reNameTo():像剪切
ListRoots():返回根盘
list():返回String,返回目录下文件及文件夹名称(包含隐藏的)。注意:list()的File对象必须是封装了一个目录,目录必须存在
接口FilenameFile:用于过滤
递归
因目录中还有目录,只哟啊使用同一个列出目录功能的函数即可,在列出过程中出现的还是目录的话,还可在此调用本功能也就是函数自己调用自己的,这种方式叫递归。
注意:
1.限定条件
2.注意递归的次数尽量避免内存溢出。
是集合与IO技术相结合的集合容器
特点:
可用于键值对形式的配置文件,加载文件时需要固定格式。
setProperty();设置键值对
getProperty():去值
stringPropertyNames()
提供了打印方法,可将各种数据类I型数据原样打印
PrintStream构造函数可以接收的参数类型
1.file对象:File
2.字符串路径:String
3.字节输出流:outputStream
PrintWriter可以接收的参数类型
1.file对象:File
2.字符串路径:String
3.字节输出流:outputStream
4.字符输出流:Writer
序列流:
SequenceInputStream
通过实现Serializable接口实现。静态不能被序列化,被transient就是的不能被序列化。
2.序列化使用的是serialVersionUID的版本号与每个可序列化类相关联,用于验证序列化对象的发送者和接受者是否为同一对象。如果接收者加载的该对象的类的serialVersionUID与对应的发送者的列的版本号不同,则反序列化将会导致InvalidClassException.
声明自己的serialVersionUID格式:
public static final long SerialVersionUID = 41L;
涉及多线程的IO流技术。
随机访问文件自身能读写,内部封装了byte数组并封装了指针。
getFilePoint():获取指针位置。
seek():没变指针位置。
其实完成读写的原理是内部封装了字节输入流和输出流
通过构造函数可以看出只能操作文件,并且操作文件有模式。
只读r、读写rw,如果模式为“r”不会创建文件会读已存在文件,如果不存在会异常。如果rw,而且该对象的构造函数要操作的文件不存在会自动创建,如果存储不会覆盖。
操作基本数据类型
DataInputStream、DataOUtputStream
用于操作基本数据类型的数据的流对象。
操作字节数组:
ByteArrayInputStream:接收源,源是一个字节数组
ByteArrayOutputStream:不定义目的因为本身就是
没调用底层资源所以不用关流,不抛异常
charArrayWriter、charArrayReader
操作字符串
StringWriter、StringReader
IO流
1.IO流用来处理设备间的数据传输2.java对数据的操作是i通过流的方式
3.java用于操作l流的对象都在IO中
4.流按操作数据分两种:字节流和字符流
5.按流向分:输入流、输出流
常用的基类(4个)
字节流的抽象基类:InputStream、OutputStream字符流的抽象基类;Reader、Writer
既然IO流是操作数据的,那常见的体现形式:文件
字节流
IO异常处理方式
使用try{}catch(){}
对已有数据的续写例子:
Reader
第一种读取方式:第二种读取方式:
字符流的缓冲区:
提高了对数据的读写效率。对应类:BufferedWriter、BufferedReader
缓冲区结合流才可以使用。在流的基础上对流的功能进行了增强
缓冲区的出现是为了提高流的操作效率而出现的,所以在创建缓冲区之前,必须有流出现。
缓冲区中还提供了一个跨平台换行符:newLine();
BufferedReader
重要方法:readLine():读一行,当末尾时,返回null。
优点:
便于对文本数据获取,返回时,孩子返回回车前内容不返回任何行终止符
原理:
无论读一行还是读取多个字符,其实最终都是在硬盘上一个一个读取,所以最终使用的还是read方法。
装饰设计模式:
当想要对已有对象进行功能增强是,可以定义一个类将已有对象传入,基于已有对象功能,并提供加强功能,那么自定义的该类就称为装饰类
装饰类通常会通过构造方法接收被装饰的对象,并基于被装饰的对象的功能,提供更强的功能。
装饰模式比继承灵活,避免了继承体系臃肿情况,降低了类间关系。
装饰音增强已有对象,具备功能和已有的好似相同的只不过提供了更强功能,所以装饰和被装饰类通常都是属于一个体系的。
LineNumberReader就是BufferedReader的装饰类
字符流
字节流缓冲区:BufferedInputStream、BufferedOutputStream
转换流
readLine()是字符流BufferedReader的方法,键盘read是字节流InputStream的方法,将字节流转换成字符流在使用其方法,即为转换流流操作的基本规律:
三个明确:
1.明确源和目的
2.操纵数据是否纯文本
3.体系明确后再明确用对象
通过设备区分:源:内存、硬盘、键盘
目的:内存、硬盘、控制台
提高效率加入缓冲区
扩展
想要把录入数据按指定编码表存数据于文件中,转换流可以指定编码表
记住,转换流什么时候用?
通常涉及字符编码转换时用。
File类
(存在于IO包中)用来将文件或者文件夹封装成对象,方便对文件与文件夹的属性信息进行操作。常见方法:
1.创建:
creatNewFile():返回boolean,在指定位置创建,如果存在不创建
mkdir():返回boolean,常见文件夹一级文件夹
mkdirs():返回boolean,常见多级文件夹
2.删除
delete():返回boolean,
deleteOnExit():返回void,退出时删除指定文件
3.判断
boolean canExecute():是否可执行
boolean exists():文件是否存在
boolean isDirectory():判断目录
boolean isFile():判断文件
boolean isHidden():是否隐藏
boolean isAbsolute():是否抽象文件不存在也判断
4.获取信息
String getName():名字
String getPath():路径
String getParent():父目录:返回绝对路径中的父目录,如果相对路径返回null
String getAbsolutePath():
Long lastmModified():返回最后修改时间
Long length():文件大小
5.跨平台分隔符:“+File.separator+“
6其他
reNameTo():像剪切
ListRoots():返回根盘
list():返回String,返回目录下文件及文件夹名称(包含隐藏的)。注意:list()的File对象必须是封装了一个目录,目录必须存在
接口FilenameFile:用于过滤
递归
因目录中还有目录,只哟啊使用同一个列出目录功能的函数即可,在列出过程中出现的还是目录的话,还可在此调用本功能也就是函数自己调用自己的,这种方式叫递归。
注意:
1.限定条件
2.注意递归的次数尽量避免内存溢出。
property
是hashtable的子类。有Map集合的特点,里面存储的键值对都是字符串。是集合与IO技术相结合的集合容器
特点:
可用于键值对形式的配置文件,加载文件时需要固定格式。
setProperty();设置键值对
getProperty():去值
stringPropertyNames()
打印流
PrintWriter、printStream提供了打印方法,可将各种数据类I型数据原样打印
PrintStream构造函数可以接收的参数类型
1.file对象:File
2.字符串路径:String
3.字节输出流:outputStream
PrintWriter可以接收的参数类型
1.file对象:File
2.字符串路径:String
3.字节输出流:outputStream
4.字符输出流:Writer
序列流:
SequenceInputStream
ObjectOutputStream、ObjectInputStream
序列化通过实现Serializable接口实现。静态不能被序列化,被transient就是的不能被序列化。
Serialzable接口
1.其中没有方法,称为标记接口。2.序列化使用的是serialVersionUID的版本号与每个可序列化类相关联,用于验证序列化对象的发送者和接受者是否为同一对象。如果接收者加载的该对象的类的serialVersionUID与对应的发送者的列的版本号不同,则反序列化将会导致InvalidClassException.
声明自己的serialVersionUID格式:
public static final long SerialVersionUID = 41L;
管道流
PipedInputStream、PipedOutputStream涉及多线程的IO流技术。
RandomAccessFile
不是IO体系的子类,是Object子类,是IO包成员。随机访问文件自身能读写,内部封装了byte数组并封装了指针。
getFilePoint():获取指针位置。
seek():没变指针位置。
其实完成读写的原理是内部封装了字节输入流和输出流
通过构造函数可以看出只能操作文件,并且操作文件有模式。
只读r、读写rw,如果模式为“r”不会创建文件会读已存在文件,如果不存在会异常。如果rw,而且该对象的构造函数要操作的文件不存在会自动创建,如果存储不会覆盖。
操作基本数据类型
DataInputStream、DataOUtputStream
用于操作基本数据类型的数据的流对象。
操作字节数组:
ByteArrayInputStream:接收源,源是一个字节数组
ByteArrayOutputStream:不定义目的因为本身就是
没调用底层资源所以不用关流,不抛异常
用流的思想操作数组
操作字符数组:charArrayWriter、charArrayReader
操作字符串
StringWriter、StringReader
相关文章推荐
- 黑马程序员_Java基础_IO流(字符流缓冲区和字节流相关操作以及相关操作技巧)
- 黑马程序员 java基础之IO流(一)
- 黑马程序员——IO流详解
- 黑马程序员__关于学习IO流中的字节流的总结
- “黑马程序员”java_IO流之PipedInputStream管道流的使用
- 黑马程序员——Java基础---IO流<实例>
- 黑马程序员——IO流字符流
- 黑马程序员---IO流
- 黑马程序员_Java_IO流_字节流
- 黑马程序员_IO流(上)
- 黑马程序员-Java基础总结11——IO流(二)
- 黑马程序员-----java基础十八(java之IO流)
- 黑马程序员 Java基础--IO流(三)
- 黑马程序员——IO流(一)
- 黑马程序员-Java中IO流知识点总结
- 黑马程序员——Java IO流
- 黑马程序员——IO流
- 黑马程序员——JAVA笔记之IO流(一)
- 黑马程序员——io流2(其它流)
- 黑马程序员--第二十一天:io流的第四天