黑马程序员--IO流(1)

来源:互联网 发布:c语言按钮 编辑:程序博客网 时间:2024/06/05 14:48

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

IO流(1)

 

IO的体系:

字节流两个基类:
InputStream(字节输入流)  OutputStream(字节输出流)

字符流两个基类:
Reader(字符输入流) Writer(字符输出流)

---------------------------------------------------------------------------------

 

学习io流体系:看顶层(父类共性功能),用底层(子类具体对象)。

 

 

该体系的一个好处就是:
每个子类的后缀名都是所属体系的父类的名称,很容易区分所属的体系。
而且每一个子类前缀名都是该子类对象的功能体现。
这样我们在使用io体系中的对象时,就非常容易查找了。

 

 

字符流的由来:

以前处理数据都是字节数据,使用字节流技术就可以完成了。

因为后期编码表的不断出现,识别某一文字的码表不唯一。比如中文,GBK,unicode都可以识别。
就出出现了编码问题。

中文字节数据 gbk --> 流处理--->gbk解析可以了。

后期:容器出现这样的问题:
中文字节数据gbk --> 流处理 unicode来处理-->数据错误。

为了处理文字数据,就需要通过 字节流技术+编码表 相结合来完成。注意:只有文字是这样的,因为文字涉及编码问题。

虽然字节流+编码表可以解决文字数据处理问题,但是较为麻烦。
为了便于使用,将字节流和编码表进行了封装,就出现了便于文字操作的流技术:字符流。
其实字符流就是:字节流+编码表

 

字符流演示

FileWriterpackage cn.itcast.io.p1.filewriter.demo;import java.io.FileWriter;import java.io.IOException;public class FileWriterDemo3 {/** * @param args */public static void main(String[] args) {/* * IO异常的处理规范。 创建流对象。 在try外创建流对象的引用。 在try内对流对象进行初始化。 */FileWriter fw = null;try {fw = new FileWriter("k:\\demo3.txt");fw.write("abcde");fw.flush();} catch (IOException e) {System.out.println(e.toString());} finally {if (fw != null)try {fw.close();} catch (IOException e) {// 相关的代码处理。比如说,将关闭失败的信息记录到日志文件中。throw new RuntimeException("关闭失败");}}}}


 

FileReader演示

package cn.itcast.io.p2.filereader.demo;import java.io.FileReader;import java.io.IOException;public class FileReaderDemo {/** * @param args * @throws IOException  */public static void main(String[] args) throws IOException {/* * 使用FileReader在构造时明确被读取的文件。 * 通过FileReader和指定的文件相关联。 */FileReader fr = new FileReader("tempfile\\demo.txt");/* * 调用字符读取流对象的read方法。对关联的文件进行读取。  * read():一次读取一个字符。并返回该字符的对应的数字。 * 读取到什么字符,就返回什么字符,读到结尾就返回-1.用-1来标示结束了。 *  *///代码使用循环解决就哦了。int ch = 0;while((ch=fr.read())!=-1){System.out.println((char)ch);}//关闭资源。fr.close();}}


 

为了提高字符流的读写效率出现了两个类 字符流的缓冲区。

BufferedReader
BufferedWriter

缓冲区给给流的操作动作(读写)提高效率.所以缓冲区的对象建立必须要有流

package cn.itcast.io.p4.charbuffer.read;import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;public class BufferedReaderDemo {/** * @param args * @throws IOException  */public static void main(String[] args) throws IOException {/* * 演示BufferedReader  *  * 1,先有字符读取流。 * 2,该类有一个特有方法。readLine().一次读一行。  *///创建读取流对象和文件相关联。 FileReader fr = new FileReader("tempfile\\buf.txt");//创建读取缓冲区对象和流对象关联,对其进行高效操作。BufferedReader bufr = new BufferedReader(fr);String line = null;while((line=bufr.readLine())!=null){System.out.print(line);}bufr.close();}}


 

bufferdreader与bufferedwriter用法相同。

 

练习一下复制文件:

package cn.itcast.io.p3.test;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class CopyTextTest2 {/** * @param args */public static void main(String[] args) {/* * 复制方式二: * 使用缓冲区数组。 * 使用的就是可以操作数组的读写方法。 *  *  *///1,定义字符输入流和字符输出流的引用。 FileReader fr = null;FileWriter fw = null;try {//2,对流对象进行初始化。fr = new FileReader("tempfile\\demo.txt");fw = new FileWriter("tempfile\\copy_demo2.txt");//3,定义一个数组缓冲区。用于缓冲读取到的数据。 char[] buf = new char[1024];//4,读写操作。 int len = 0;while((len = fr.read(buf))!=-1){fw.write(buf,0,len);}} catch (Exception e) {System.out.println(e.toString());}finally{if(fw!=null)try {fw.close();} catch (IOException e) {throw new RuntimeException("写入关闭失败");}if(fr!=null)try {fr.close();} catch (IOException e) {e.printStackTrace();}}}}


 

0 0
原创粉丝点击