黑马程序员_IO流-字符流的学习(一)

来源:互联网 发布:centos 五笔 编辑:程序博客网 时间:2024/06/06 18:35

------------------------------android培训java培训期待与您交流! ----------------------------------------------------------------



字符流:

 

1.      字符流两个基类:

Writer   Reader

 

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

 

 

2.      实例:

 

写入文件Writer

java.lang.Object

  java.io.Writer

      java.io.OutputStreamWriter

         java.io.FileWriter

 

需求:在硬盘上,创建一个文件并写入一些文字数据(字符串)

 

import java.io.*;

class FileWriterDemo

{

       publicstatic void main(String[] args)   {

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

       }

 

//结果: 一定出现IO异常

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

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

 

//第二步: 调用write方法,将字符串写入到流中。写到流中,写到内存中了,并没有写到目的地.

import java.io.*;

class FileWriterDemo

{

       publicstatic void main(String[] args) throws IOException

       {

             

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

 

      

              fw.write("abcde");

       }

}

 

 

//要将数据写入目的地中, 刷新流对象中的缓冲中的数据。

import java.io.*;

class FileWriterDemo

{

       publicstatic void main(String[] args) throws IOException

       {

             

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

 

      

              fw.write("abcde");

 

                     fw.flush();

}

}

 

//关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。

//将数据刷到目的地中。

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

//java调用”写”的动作时,也必须调用系统中的”写”动作,则必须使用完资源后关闭.

import java.io.*;

class FileWriterDemo

{

       publicstatic void main(String[] args) throws IOException

       {

             

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

 

      

              fw.write("abcde");

 

                     fw.close();

}

}

             

 

需求:IO异常处理:

import java.io.*;

 

class  FileWriterDemo2

{

public static void main(String[]args)

{

        try

        {

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

               fw.write("abcdefg");//都会有异常

               fw.close();            

 

        }

        catch (IOException e)

               {

                      System.out.println(e.toString());//简单处理.

               }

              

        }           

 

}

 

//fw.close();关流的动作一定会执行的,finally

try

        {

               fw = newFileWriter("demo.txt");

               fw.write("abcdefg");

 

        }

        catch (IOException e)

        {

               System.out.println("catch:"+e.toString());

        }

        finally

        {

               fw.close();             //发生异常没处理

        }           

 

       }

}     

 

 

//运行时会出错,

Exception in thread"main" java.lang.Error: Unresolved compilation problem:

    Unhandled exception type IOException

 

    at com.demo.io.FileWriterDemo2.main(FileWriterDemo2.java:22)

 //此时有三个代码块,第一个代码块中定义的FileWriter fw 其他代码块中访问不到.改成

// 在外面建立引用,在try内建立初始化,则fw 能作用于全局,

 

//最后正确的代码是:

package com.demo.io;

 

import java.io.*;

 

class  FileWriterDemo2

{

   public static void main(String[] args)

   {

      FileWriter fw = null;

      try

      {

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

        fw.write("abcdefg");

 

      }

      catch (IOException e)

      {

        System.out.println("catch:"+e.toString());

      }

      finally

      {

        try

        {

           if(fw!=null)//有可能fw对象没有建成

           fw.close();

        }

        catch (IOException ex)

        {

           // TODO Auto-generatedcatch block

           ex.printStackTrace();

        }    

      }    

 

      }

 

}

 

需求:演示对已有文件的数据续写。

 

import java.io.*;

class  FileWriterDemo3

{

    public static void main(String[] args)

{

FileWriter fw = null;

      try

      {

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

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

 

       fw.write("nihao\r\nxiexie");//”\r\n” 表示换行

 

       fw.close();

 

      }

      catch (IOException e)

      {

        System.out.println("catch:"+e.toString());

      }

      finally

      {

        try

        {

           fw.close();

        }

        catch (IOException ex)

        {

           // TODO Auto-generatedcatch block

           ex.printStackTrace();

        }    

      }    

      

    }

}

补充: 处理异常的三种方式:  e.printStackTrace()是打印异常堆栈信息,能够完整的输出各种异常,是程序员规范的代码写作形式

通过调用异常的getMessage()方法,可以获取执行程序所抛出异常的详细信息。

 

catch (IOException e)

      {

       

//    System.out.println("catch:"+e.toString());//第一种方式  效果同:    System.out.println("catch:"+e);

//    System.out.println("catch:"+e.getMessage());//第二种放式

        e.printStackTrace();//第三种方式

       

       

      }

 

 










------------------------------android培训java培训期待与您交流! ----------------------------------------------------------------



--
原创粉丝点击