IO流---异常处理机制

  ——- 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值