IO流---异常处理机制

来源:互联网 发布:企业查询软件 编辑:程序博客网 时间:2024/04/30 01:52

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

IO异常处理机制
异常就是可以预见的错误,java中所有的异常都从Throwable类中继承,
不过在一般情况下都会由 Exception 类派生出来。
异常分为两个部分:
错误:出现错误,只能终止程序
异常:出现异常,可以处理异常
异常又分为两种:
运行时期异常,是由程序员自身错误造成的,也称为未检查异常,例如空指针异常、数组越界异常等。
非运行期异常:除运行期异常外,其他都属于非运行期异常,也叫检查异常
异常的声明:
异常声明是在方法的头部,利用关键字throws来表示此方法在运行的时候可能会出错。
其实就是声明一个异常类,在声明之后将其抛出。如实例1和实例3都有抛出异常
异常的抛出:
就是将异常抛给异常处理器,暂时不去处理它。
还有一种异常就是不断的抛出而不去进行处理,这是通过关键字throw来处理的。
因为他们的父类都是Exception,所以可以使用父类来代替所以的异常
异常抛出的模型:
方法名 throws Exception
{
throw Exception
}
检查异常可以分为很多种,主要分类如下:
SecurityException 由安全管理器抛出的异常,指示存在安全侵犯。
ArithmeticException 算术异常。例如,一个整数“除以零”时
ArrayStoreException 试图将错误类型的对象存储到一个对象数组时抛出的异常
NullPointerException 无空间对象异常。
IllegalArgumentException 向方法传递了一个不合法或不正确的参数。
NegativeArraySizeException 如果应用程序试图创建大小为负的数组,则抛出该异常。
ArrayIndexOutOfBoundsException 用非法索引访问数组时抛出的异常
IOException IO异常,当发生某种 I/O 异常时,抛出此异常

import java.io.*;class  ExceptionDemo {    public static void main(String[] args) {        //在try之前创建文件流对象引用,try时再在内部初始化。        //因为finally要执行关闭流的操作        FileWriter fw = null;        //检测异常        try{            //创建对象实体并与指定目录下的文件关联,如果目录不存在就会报找不到路径异常。            fw = new FileWriter("txt1\\txt-1.txt");            //写入数据到流中。            fw.write("Hello World");        }        //捕获异常        catch (IOException e){            System.out.println("错误:"+e.toString());        }        //最后要关闭流,关闭流也要检测异常。        finally{            try{                //先判断如果对象不为null,表示有对象实体--流,就关闭流                if(fw!=null)                    fw.close();            }            catch (IOException e){                System.out.println("错误:"+e.toString());            }        }    }}

练习:
将某个文件从C盘复制到D盘
复制的原理:
其实就是将C盘下的文件数据存储到D盘的一个文件中。
步骤:
1、在D盘创建一个文件,用于存储C盘文件中的数据。
2、定义读取流和C盘文件关联。
3、通过不断的读写(循环读写)完成数据存储。
4、关闭资源。
可以用两种方式实现,如实例6和实例7,主要是实例7。
复制文本文件方式1

import java.io.*;class  CopyFileDemo{    public static void main(String[] args) throws IOException{        //创建文件写入流--目的地        FileWriter fw = new FileWriter("txt\\txt-Copy.txt");        //创建文件读取流--源文件        FileReader fr = new FileReader("txt\\txt-1.txt");        //从文件读取流中读取所有文件到写入流中。        int ch = 0;        while((ch=fr.read())!=-1){            fw.write(ch);                                          }        //关闭两个流        fw.close();        fr.close();    }}

由于上面的代码没有对程序可能出现的异常进行处理,
下面将详细检测和处理异常。并对代码进行优化。

import java.io.*;class  CopyFileTest{    public static void main(String[] args) throws IOException{        //创建写入流和读取流的对象引用        FileWriter fw = null;        FileReader fr = null;        //检测异常        try{            //创建对象实体-源文件和目的文件            fw = new FileWriter("txt\\txt-1 附件.txt");            fr = new FileReader("txt\\txt-1.txt");            //创建字符数组,用于存储读到的字符数据            char[] buf = new char[1024];                int len = 0;            while((len=fr.read(buf))!=-1){                //写入字符数组从0到len部分。一次性写入                fw.write(buf,0,len);                       }        }        //处理异常        catch (IOException e){                                    throw new RuntimeException("读写失败!");            }        //最终要执行关闭2个流的动作。        finally{            //关闭前要判断流是否存在,存在就关闭,关闭动作也要进行异常处理            if(fr!=null)                try{fr.close();}                catch (IOException e){}            if(fw!=null)                try{fw.close();}                catch (IOException e){}        }    }}

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

0 0
原创粉丝点击