黑马程序员技术交流社区

标题: 黑马程序员————IO [打印本页]

作者: heimafeng    时间: 2015-8-17 23:03
标题: 黑马程序员————IO
     ------<a  target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
1、 什么是IO流IO流用来处理设备之间的数据传输。Java对数据的操作是通过流的方式。输入流和输出流相对于内存设备(也可以理解为我们的程序)而言。2、 IO流的定义分类1.按照操作类型分类:
2.按照数据流向分类:
1、简述字符流
        1、字符流中的对象融合了编码表。使用的是默认的编码,即当前系统的编码。
        2、字符流只用于处理文字数据,而字节流可以处理媒体数据。
        3、既然IO流是用于操作数据的,那么数据的最常见体现形式是文件。查看API,找到一个专门用于操作文件的Writer子类对象:FileWriter。   后缀是父类名。前缀名是流对象的功能。该流对象一被初始化,就必须有被操作的文件存在。

2、字符流的读写
1、写入字符流步骤
        a、创建一个FileWriter对象,该对象一被初始化,就必须要明确被操作的文件。且该目录下如果已有同名文件,则同名文件将被覆盖。其实该步就是在明确数据要存放的目的地。
        b、调用write(String s)方法,将字符串写入到流中。
        c、调用flush()方法,刷新该流的缓冲,将数据刷新到目的地中。
        d、调用close()方法,关闭流资源。但是关闭前会刷新一次内部的缓冲数据,并将数据刷新到目的地中。
close()和flush()区别:
        flush()刷新后,流可以继续使用;
       而close()刷新后,将会关闭流,不可再写入字符流。
注意:
        1、其实java自身不能写入数据,而是调用系统内部方式完成数据的书写,使用系统资源后,一定要关闭资源。
        2、文件的数据的续写是通过构造函数 FileWriter(Strings,boolean append),在创建对象时,传递一个true参数,代表不覆盖已有的文件。并在已有文件的末尾处进行数据续写。(windows系统中的文件内换行用\r\n两个转义字符表示,在linux系统中只用\n表示换行)
        3、由于在创建对象时,需要指定创建文件位置,如果指定的位置不存在,就会发生IOException异常,所以在整个步骤中,需要对IO异常进行try处理。
3、字符流的缓冲区——BufferedReader和BufferedWriter
1、缓冲区的出现:提高了流的读写效率,所以在缓冲区创建前,要先创建流对象。即先将流对象初始化到构造函数中。
2、缓冲技术原理:此对象中封装了数组,将数据存入,再一次性取出。
3、写入流缓冲区BufferedWriter的步骤:
        1)创建一个字符写入流对象。
         如:FileWriter fw=newFileWriter("buf.txt");
         2)为了提高字符写入流效率。加入缓冲技术。只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可。
         如: BufferedWriter bufw =new BufferedWriter(fw);
         3)调用write方法写入数据到指定文件
         如:bufw.write("adfg");
         记住,只要用到缓冲区,就要记得刷新。(关闭流同样会刷新,但为了排除意外事故,保证数据存在,建议写入一次就刷新一次)
         如:bufw.flush();
         4)其实关闭缓冲区,就是在关闭缓冲区中的流对象。
        如: bufw.close();
小知识:BufferedWriter缓冲区中提供了一个跨平台的换行符:newLine();可以在不同操作系统上调用,用作数据换行。
        如:bufw.newLine();
4、读取流缓冲区BufferedReader
        该缓冲区提供了一个一次读一行的方法readLine,方便于堆文本数据的获取,当返回null时表示读到文件末尾。readLine方法返回的时候,只返回回车符之前的数据内容。并不返回回车符。
readLine方法原理:
        无论是读一行。或者读取多个字符。其实最终都是在在硬盘上一个一个读取。所以最终使用的还是read方法一次读一个的方法。
步骤:
        1)创建一个读取流对象和文件相关联
        如: FileReader fr=newFileReader("buf.txt");
        2)为了提高效率。加入缓冲技术。将字符读取流对象作为参数传递给缓冲区对象的构造函数。
        如: BufferedReader bufr=new BufferedReader(fr);
        3)调用该缓冲区提供的readLine方法一行一行读取,如果到达文件末尾,则返回null
        如: String s=bufr.readLine();
        4)关闭流资源
        如: bufr.close();






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2