卢雨杰12.8
学习内容:(流)
为了能够 读取文件中的内容 或者 向文件中写入内容 ,就需要用到文件输入流或文件输出流,本节将系 统讲解通过流完成对文件内容的读取和写入操作。
流的定义:能够 读取数据 或者 写出数据 的对象的抽象说法
流的四个对应类型都扩展自四个抽象类:
字节流 字符流
输入流: InputStream Reader
输出流: OutputStream Writer
按照流中数据的流向来分类,可以分为 输入流 和 输出流:
用于实现从外部读取数据到当前程序的流被称作输入流
用于实现从当前程序中向外部输出数据的流被称作输出流
按照流处理的数据单元来分类,可以划分为 字节流 和 字符流
如果某个流在读取或写入数据时以字节为单位,则该流属于字节流
如果某个流在读取或写入数据时以字符为单位,则该流属于字符流
按照流的功能来分类,可以分为 节点流 和 包装流
直接数据节点中读取数据或向数据节点中写入数据的流被称作节点流
数据节点可以是磁盘上的文件或其它数据源(比如键盘输入) 节点流都比较原始,仅用于实现数据的读取和写入,通常不具备其它功能 用于从其它流中读取数据,并实现其它流所不具备的功能的流,被称作包装流
包装流也被称作 转换流 或 处理流 或 过滤流 包装流通常会提供它内部所包装的流不具备的功能 包装流内部所处理的流(也称作所过滤的流)被称作底层支持流
一切文件数据(文本、图片、视频等)在存储时,都是以二进制数字的形式保存
输入流构造方法
File file = new File("d:\\temp\\test.txt");//获取到文件
System.out.println(file.exists());//判断是否存在
System.out.println(file.isFile());//判断是否是文件
FileInputStream in = new FileInputStream(file);//实例化对象
System.out.println(file.length());//输出文件长度
byte[] bytes = new byte[188]; //创建一个byte数组存储数据,方括号中表示一次读取的字节数
while(true) {
int i ;
i = in.read(bytes);
if(i == -1) {//如果i=-1,则为末尾,跳出循环
break;
}
Charset gbk = Charset.forName("utf-8");
String str = new String(bytes,gbk);//创建字符串输出获取内容
System.out.println(str);
in.close();
BufferedInputStream
BufferedInputStream 类的实例表示带有缓冲功能的字节输入流,它是一种包装流
按顺序关闭流 ( 后开的先关闭 )
输出流outputstream
OutputStream 类是所有字节输出流的顶层父类
FileOutputStream 是用于将数据写入到 File 或 FileDescriptor 的输出流。
FileOutputStream 用于写入诸如图像数据之类的原始字节的流
复制一个文件:
File file = new File("d:\\temp\\test.txt");
// 创建一个 File 实例,表示复制后的目标文件 ( 复制到哪里、叫什么名字 )
File target = new File("D:/temp", source.getName());
// 判断 被复制的文件 是否存在 且 是一个文件
if (source.exists() && source.isFile()){
// 创建一个输入流,用于 读取 被复制的源文件中的内容
InputStream in = new FileInputStream(source);
// 创建一个输出流,用于 向 目标文件 中输出被复制的内容
OutputStream out = new FileOutputStream(target);
nanoTime 方法只能用于测量时间间隔,与系统或钟表时间的其他任何时间概念无关。
nanoTime 方法不是从历元开始所经历的纳秒数,而是 JVM 选择一个任意的时间点作为参照,获取从该 参照时间点到当前所经历的 纳秒数
评论留言