码迷,mamicode.com
首页 > 其他好文 > 详细

IO(Input Output)流___字符流、字节流

时间:2016-01-09 22:56:44      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:

一、IO流简述------用于操作数据的

  IO流用来处理设备之间的数据传输;

  Java对数据的操作是通过流的方式;

  Java用于操作流的对象都是在IO包中;

  流按操作数据分为: 字节流(通用)和字符流;  按流向分为: 输入流和输出流.

字节流的抽象基类:

   InputStream , OutputStream

字符流的抽象基类:

   Reader, Writer

  注: 由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。

    如: InputStream的子类FileInputStream ;Reader的子类FileReaderStream。

 

二、

  字节流的两个基类:

    InputStream , OutputStream

  字符流的两个基类:(专门处理文本和数据)

    Reader, Writer

--------->>>字符流

   先以操作文件为主来演示

  要求: 在硬盘上,创建一个文件并写入一些文字数据

    找到一个专门用于操作文件的Writer子类对象.FileWriter。 后缀名是父类名。 前缀是该流对象的功能。

  

  创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件;

  而且该文件会被创建到指定目录下,如果该目录下已有同名文件,将该文件覆盖;

  其实该步就是在明确数据要存放的目的地 :

              FileWriter fw = new FileWriter("demo.txt");

  调用write方法,将字符串写入到流中:   

              fw.writer("abcdef");

  刷新流对象中的缓冲中数据 ,将数据刷到目的地中:

              fw.flush();

  关闭流资源,但是关闭之前会刷新一次内部的缓冲区的数据; 将数据刷新到目的地中。

  和flush区别: flush刷新后,流可以继续使用,close刷新后,会将流关闭:

              fw.close();

IO异常的处理方式:

 请看代码:

import java.io.*;

calss FileWriterDemo {
    public static void main(String[] args) {
    FileWriter fw = null;
    try {
      fw = new FileWriter("demo.txt");
                  fw.write("safdasf");
    }catch(IOException) {
      System.out.println("catch:"+e.toString());
    }
    finally {
      try {
        if(fw!=null)
          fw.close();
      }
catch(IOException) {
          System.out.println("catch:"+e.toString());
      }
    }
  }
}

  

  文件的续写:

  传递一个true参数,代表不覆盖已有的文件,并在已有文件的末尾处进行数据续写:

    FileWriter fw = new FileWriter("Demo.txt",true);

  文本文件的读取:

   方式一:

      创建一个文件读取流对象,和指定名称的文件相关联;

      要保证该文件是已经存在的,如果不存在,会发生异常 FileNotFoundException 。

        FileReader fw = new FileReader("Demo.txt");

      调用读取流对象的read方法:

        read(): 一次读一个字符,而且会自动往下读。

      While((ch = fr.read()) != -1) {

        System.out.println("ch="+(char)ch);

      }

   方式二:

      FileReader fw = new FileReader("Demo.txt");

      /* 定义一个字符数组,用于存储读到字符;

      该read(char[]) 返回的是读到字符个数 */:

         char[] buf = new char[1024];

         int num  = 0;

         while((num=fr.read(buf)) != -1) {

          System.out.println(new String(buf, 0, num));

         }

    小练习: 读取一个.java 文件, 并打印在控制台上。

 拷贝文本文件:

    将C盘一个文件文本复制到D盘:    

      复制的原理——>其实就是将C盘下的文件数据存储到D盘的一个文件中

    步骤:

      1、在D盘创建一个文件,用于存储C盘文件中的数据。

      2、定义读取流和C盘文件关联;

      3、通过不断的读写完成数据存储;

      4、关闭资源

   一个实现了复制功能的Copy类:

 1 public static void Copy() {
 2    FileWriter fw = null;
 3    FileReader fr = null;
 4   try {
 5      fw = new FileWriter("Demo_copy.txt");
 6      fr = new FileReader("Demo.java");
 7      char [] buf = new char[1024];
 8      int len = 0;
 9      while((len = fr.read(buf)) != -1) {
10        fw.write(buf, 0, len);
11      }
12    } catch(IOException e) {
13        throw new RuntimeException("读写失败");
14     }
15     finally {
16         if(fr != null)
17           try {
18             fr.close();
19            }catch(IOException e) {
20 
21            }
22           if(fw != null)
23           try {
24             fw.close();
25            }catch(IOException e) {
26 
27            }
28     }
29 }          

    

IO(Input Output)流___字符流、字节流

标签:

原文地址:http://www.cnblogs.com/jesonjason/p/5117387.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!