第一讲 IO概述
1. 流的概念
IO流即InputOutput的缩写,在Java中IO流用来处理设备之间的数据传输,Java对数据的操作是通过IO流的方式,我们可以把IO流抽象的当作一根管道,而
数据的传输就好比流水,在管道中我们能更加轻松的实现数据的传输。
Java用于操作流的对象都在IO包中。
2. 流的分类
① 按流向分,可分为: 输入流和输出流
注意:输入和输出的参照物是本设备,向里传输数据称为输入,向外传输数据称为输出,所以程序可以从输入流中读取数据,输出流中输入数据
② 按操作数据分为两种: 字节流和字符流
字节流以InputStream和OutputStream为后缀,表示操作的最小数据单元为字节
字符流以Reader和Writer为后缀,表示操作的最小数据单元为字符
注意: 字符流是对字节流进行了封装,方便操作。在最底层,所有的输入输出都是字节形式的。
③ 按功能分类,可分为:节点流和处理流
节点流:可以直接从或向一个特定的地方(节点)读写数据,常用节点流有:
处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。 如BufferedReader。处理流的构造方法总是要带一个 其他的流对象做参数。一个流对象经过 其他流的多次包装,称为流的链接。相当与在一个管道上接了另一个管道,以实现更通用的功能
3. IO流的常用基类:
1)字节流的抽象基流:InputStream和OutputStream
2)字符流的抽象基流:Reader和Writer
注:此四个类派生出来的子类名称都是以父类名作为子类名的后缀,以前缀为其功能;如InputStream子类FileInputStream;Reader子类FileReader
第二讲 字符流
1. 简述
1、字符流中的对象融合了编码表。使用的是默认的编码,即当前系统的编码。
2、字符流只用于处理文字数据,而字节流可以处理媒体数据。
3、既然IO流是用于操作数据的,那么数据的最常见体现形式是文件。查看API,找到一个专门用于操作文件的Writer子类对象:FileWriter。后缀是父类名。前
缀名是流对象的功能。该流对象一被初始化,就必须有被操作的文件存在。
2. 字符流的读写(以FileWriter和FileReader为例)
a、创建一个FileWriter对象,该对象一被初始化,就必须要明确被操作的文件。且该目录下如果已有同名文件,则同名文件将被覆盖。其实该步就是在明确数 据要存放的目的地。
b、调用write(String s)方法,将字符串写入到流中。
c、调用flush()方法,刷新该流的缓冲,将数据刷新到目的地中。
d、调用close()方法,关闭流资源。但是关闭前会刷新一次内部的缓冲数据,并将数据刷新到目的地中。
注意:① close()和flush()区别:
close()和flush()都能刷新流中的缓存,但是flush()刷新后流可以继续使用,但是close()关闭流之后,不能在写入字符串
② 文件的数据的续写是通过构造函数 FileWriter(Strings,boolean append),在创建对象时,传递一个true参数,代表不覆盖已有的文件。并在
已有文件的末尾处进行数据续写,默认覆盖
例子1: 在硬盘上创建一个文件,并读入一些数据
1 import java.io.FileWriter; 2 import java.io.IOException; 3 4 /* 5 * 在硬盘上创建一个文件,并读入一些数据 6 */ 7 public class FileWriterDemo { 8 public static void main(String[] args) { 9 //1. 创建一个FileWriter文件流对象,该对象一初始化就要明确操作的文件 10 //该文件被创建到指定目录下,如果该目录下已经有同名文件,则被覆盖 11 //如果需要所写文件追加到已有文件后面,则使用构造方法 12 //FileWriter(String fileName, boolean append) 13 FileWriter fw = null; 14 try { 15 fw = new FileWriter("F:/javaee/text.txt"); 16 //2. 调用write方法,将字符写入流中 17 fw.write("abcdefg"); 18 //3. 刷新缓存,将流中的数据传输到目的地文件中 19 //fw.flush(); 21 } catch (IOException e) { 22 e.printStackTrace(); 23 }finally{ 24 try { 25 fw.close(); //4.记得在finally代码块中关闭流资源 26 } catch (IOException e) { 27 e.printStackTrace(); 28 } 29 } 30 } 31 }
原文:http://www.cnblogs.com/chenjinsen/p/4988998.html