黑马程序员-Java语言基础– IO流 第18天

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

 

1、IO(InputOutput)流

 

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

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

·Java用于操作流的对象都在IO包中。java.io.*

·流按操作数据分为两种:字节流与字符流

·流按流向分为:输入流,输出流。

字符流融合编码表。

编码表:ASCII码;GB2312;GBK;UNICODE(两个字节16位);UTF-8(按需求分配)

 

IO流常用基类:

字节流的抽象基类:

      InputStream,OutputStream

字符流的抽象基类:

      Reader,Writer

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

例如:

      InputStream的子类FileInputStream。

      Reader的子类FileReader。

 

IO程序的书写:

导入IO包中的类。进行IO异常处理。在finally中对流进行关闭。

 

2、字符流------创建文件FileWriter

 

先学习一下字符流的特点。[day18-07]

既然IO流是用于操作数据的,那么数据最常见的体现形式就是文件。

那么先以操作文件为主来演示。

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

找到一个专门用于操作文件的Writer子类对象。FileWriter。

后缀名是父类名,前缀名是该流对象的功能。

      (没有空参数的构造函数:该对象一被初始化,就必须有要明确被操作的文件。而且该文件会被创建到指定的目录下。如果该目录下已有同名文件,将被覆盖。就是在明确数据要存放的目的地。)

步骤:

1、创建流对象,建立数据存放文件。

      FileWriter fw = newFileWriter(“Demo.txt”);

2、调用流对象的写入方法,将数据写入流。

      fw.write(“abcde”);

3、刷新流对象,将其中的缓冲数据刷到目的地中去。

      fw.flush();

4、关闭流资源,并将流中的数据清空到文件中。

      fw.close();//关闭流,会先刷新流。

关闭流资源。但是关闭之前仍然要刷新一次内部缓冲中的数据。将数据刷到目的地中。

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

      带IO异常处理的完整创建文件代码:

import java.io.*;

class FileWriterDemo2

{

      public static void main(String[] args)

      {

           FileWriter fw = null;//在外部创建引用,在try内部进行初始化。

           try

           {

                 fw = new FileWriter("demo.txt");//都抛异常

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

                 //fw.close();//都抛异常且三句话有关联。             

           }

           catch (IOException e)

           {

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

           }

           finally//一定要执行的语句放在finally中。fw.close也要抛异常,单独再次try。

           {

                 try

                 {

                      if(fw!=null)//不可能为空,才有关闭的可能。

                            fw.close();  //对关闭的流,进行不为null判断。多个流时,分别关闭。

                 }

                 catch (IOException e)

                 {

                      System.out.println(e.toString());

                 }               

           }         

      }

}

 

对已有文件的数据读写:

      构造流对象时传递一个true参数,代表不覆盖已有文件,而是在已有文件的末尾处进行数据读写。

FileWwriter(String fileName,boolean append)

 

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

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

fw.close();

 

 

 

写的动作完成,开始读取数据[day18-12]

3、字符流------读取文件FileReader

 

1、建立一个流对象,将已存在的一个文件加载进流。

      FileReader fr = newFileReader(“Test.txt”);

2、创建一个临时存放数据的数组。

      char[] ch = new char[1024];//1024的整数倍

3、调用流对象的读取方法将流中的数据读入到数组中。

      fr.read(ch);//read(char[])方法返回的是读到的字符个数,达到流末尾返回-1。 

4、关闭流资源。

      fr.close();

参考程序(复制文本文件)

import java.io.*;

 

class CopyText

{

      public static void main(String[] args) throws IOException                                                

      {

                 copy_2();

      }         

      public static void copy_2()

      {

           FileWriter fw = null;

           FileReader fr = null;

           try

           {

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

                 fr = new FileReader("SystemDemo.java");

                 char[] buf = new char[1024];

                 int len = 0;

                 while ((len=fr.read(buf))!=-1)

                 {

                      fw.write(buf,0,len);

                 }

           }

           catch (IOException e)

           {

                 throw new RuntimeException("读写失败!");

           }

           finally//资源需要单独关闭。

           {

                 if(fr!=null)

                      try

                      {

                            fr.close();

                      }

                      catch (IOException e)

                      {

 

                      }

 

                      if(fw!=null)

                      try

                      {

                            fw.close();

                      }

                      catch (IOException e)

                      {

 

                      }

           }

      }    




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

详细请查看:http://edu.csdn.net/heima


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值