黑马程序员———IO(上)

来源:互联网 发布:网络摄像头安装视频 编辑:程序博客网 时间:2024/06/13 17:27
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


 

IO流用来处理设备之间的数据传输
Java对数据的操作是通过流的方式
Java用于操作流的对象都在IO包中
流按操作数据分为两种:字节流和字符流
流按流分为:输入流和输出流

IO流常用基类:
字节流的抽象基类:
     InputStream OutputStream
字符流的抽象基类:
     Reader Writer

注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀
     如:InputStream的子类FileInputStream
     如:Reader的子类FileReader。
     前缀名可以理解为该流对象的功能。


既然IO流是用于操作数据的,那么数据的最常见体现形式是:文件。
那么先以操作文件为主来演示。
需求:
     在硬盘上,创建一个文件并写入一些文字数据。
     找到一个专门用于操作文件的Writer子类对象FileWriter。

FileWriter extends OutputStreamWriter
用来写入字符文件的便捷类。此类的构造方法假定默认的字符编码和
默认字节缓冲区都是可接受的。要自己制定这些值,可以先在FileOutputStream
上构造一个OutputStreamWriter。
FileWriter用于写入字符流。要写入原始字节流,考虑使用FileOutputStream。

==============================================================

public class FileWriterDemo {

     public static void main(String[] args) throws IOException {
          /*
          下面try catch finally有三个代码块,而关闭流操作需要访问FileWriter对象,那么需要
          把建立引用放在异常处理的代码块之外,在try代码块中初始化,
          否则放在try代码块中finally代码块无妨访问fw。
          */
          FileWriter fw = null;
          try {
               /*
               创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件。
               而且该文件会被创建到指定目录下,如果该目录下已有同名文件,将被覆盖。

               这一步就是在明确数据要存放的目的地。
               */
               fw = new FileWriter("demo.txt");
               /*
               调用write方法,将字符串写入到流中。
               */
               fw.write("over the rainbow");
               /*
               刷新流对象中的缓冲中的数据。将数据刷到目的地中。
               */
               fw.flush();
          } catch (IOException e) {
               throw new IOException("文件名错误或文件路径错误或内存溢出");
          }
          finally
          {
               /*
               关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据,将数据刷到目的地中。
               和flush的区别:
                         flush刷新后,流还可以继续使用。
                         close刷新后,流会关闭。

               */
               try     {
                    fw.close();
                    }catch(IOException e){
                         throw new IOException("关闭流失败");
                    }
              
          }
         
     }

}
============================================================
异常处理:

/*
下面try catch finally有三个代码块,而关闭流操作需要访问FileWriter对象,那么需要
把建立引用放在异常处理的代码块之外,在try代码块中初始化,
否则放在try代码块中finally代码块无妨访问fw。
*/
java.io.FileNotFoundException: k:\demo.txt (系统找不到指定的路径。)
     Exception in thread "main" java.lang.NullPointerException
          at cn.itcast.IO.FileWriterDemo2.main(FileWriterDemo2.java:33)

出现了文件找不到异常,表明了文件创建失败。则fw的指向为null。在finally中一定会执行语句fw.close();
但是却无法调用close,这时,为了提高代码的健壮性,需要对它进行判断.

==============================================================
/*
演示对已有文件的续写:

     FileWriter的构造函数:
       FileWriter(File file)
       FileWriter(String fileName)
    
   FileWriter(String fileName,boolean append)
            根据给定的文件名以及提示是否附加写入数据的boolean值来构造FileWriter对象。
 
       传递一个true参数,代表不覆盖已有的文件,并在已有的文件末尾处进行数据续写。
       FileWriter fw = new FileWriter("demo.txt",true);
  \n  换行符
  \r  回车符    
 
*/

==============================================================


package cn.itcast.IO;
/*
第二种方式:通过字符数组进行读取。
*/
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class FileReaderDemo2 {
     public static void main(String[] args)
     {
          FileReader fr = null;
          try {

               fr = 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));;
               }

          } catch (FileNotFoundException e) {
               System.out.println(e.toString());
          } catch (IOException e) {
               System.out.println(e.toString());
          } finally {
               try {
                    fr.close();
               } catch (IOException e) {
                    System.out.println(e.toString());
               }
          }
         
     }
}

                    

 

 

 

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


 

0 0
原创粉丝点击