<span style="font-size:12px;">------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------</span>
IO流概述
1.IO流:Input Output流 或者数据流
(1)IO流用来处理设备间的数据传输。
(2)Java对数据的操作是通过流的方式。
(3)Java用于操作流的对象都在IO包中。
(4)流按操作数据分为两种:字节流和字符流。
(5)流按流向分为:输入流和输出流。
注意:流只能操作数据,而不能操作文件。
补充:码表
(1)ASCII码表:每个字符都对应键盘上的一个键,只有enter键对应两个字符(\r\n),每个字符占1个字节
(2)gb2312码表:英文占1个字节(正数),汉字占两个字节(负数)
(3)gbk码表: 英文占1个字节(正数),汉字占两个字节(第一个是负数,第二个可正可负)
(4)unicode码表:所有字符都占两个字节,前两个字节位特征码
(5)UTF-8码表: 每个字符占1~3个字节,英文占1个,汉字占3个,前三个为特征码
2.IO流的常用基类:
(1)字节流的抽象基流:InputStream和OutputStream
(2)字符流的抽象基流:Reader和Writer
注:此四个类派生出来的子类名称都是以父类名作为子类名的后缀,以前缀为其功能;如InputStream子类FileInputStream;Reader子类FileReader
字符流
1:字符流的读写
实例:在硬盘上,创建一个文件并写入一些文字数据。
思路:找到一个专门用于操作文件的Writer子类对象。FileWriter。 后缀名是父类名。 前缀名是该流对象的功能。
写入字符流步骤
(1)创建一个FileWriter对象,该对象一被初始化,就必须要明确被操作的文件。且该目录下如果已有同名文件,则同名文件将被覆盖。其实该步就是在明确数据要存放的目的地。
FileWriter fw = new FileWriter("demo.txt");
(2)调用write(String s)方法,将字符串写入到流中。
fw.write("abcde");
(3)调用flush()方法,刷新该流的缓冲,将数据刷新到目的地中。
fw.flush();
(4)调用close()方法,关闭流资源。但是关闭前会刷新一次内部的缓冲数据,并将数据刷新到目的地中。
fw.close();
close()和flush()区别:
flush()刷新后,流可以继续使用;而close()刷新后,将会关闭流,不可再写入字符流。
注意:
(1)java自身不能写入数据,是调用系统内部方式完成数据的xieru ,使用系统资源后,一定要关闭资源。
(2)续写构造函数:FileWriter(Strings,boolean append),在创建对象时,传递一个true参数,代表不覆盖已有的文件。并在已有文件的末尾处进行数据续写。
(windows系统中的文件内换行用\r\n两个转义字符表示,在linux系统中只用\n表示换行,EditPlus软件既支持\r又支持\r\n)
(3)在关闭fw.close(),的时候一定要进行判断fw是否为空。
实例:day18\FileWriterDemo2.java
2.读取字符流步骤
(1)创建一个文件读取流对象,和指定名称的文件相关联。要保证该文件已经存在,若不存在,将会发生异常FileNotFoundException。
FileNotFoundException属于IOException的子类异常.
FileReader fr = new FileReader("demo.txt");
(2)调用读取流对象的read()方法。读取的字符,如果已到达流的末尾,则返回 -1。windows系统在每个文件结尾处有一个结束标识,在java不返回这个标识,而返回-1作为文件结尾
read():一次读一个字符,且会继续往下读。
第一种方式:读取单个字符。
int ch = 0;
while((ch=fr.read())!=-1){...}
第二种方式:通过字符数组进行读取。
char[] buf = new char[1024]; //2k个字节,一个字符两个字节
i nt num = 0;
while((num=fr.read(buf))!=-1){...}
这两个方法的区别如图所示:
注:读取的时候不需要刷新,直接读取数据
实例:将C盘一个文本文件复制到D盘。代码:day18\CopyText.java
复制的原理:
其实就是将C盘下的文件数据存储到D盘的一个文件中。
步骤:
( 1) 在D盘创建一个文件。用于存储C盘文件中的数据。
(2) 定义读取流和C盘文件关联。
(3) 通过不断的读写完成数据存储。
( 4) 关闭资源。
如图所示: