Fork me on GitHub

Java IO异常处理方式

public class IOException{

    // 获取系统默认的行分隔符
    private static final String LINE_SEPARATOR = System.getProperty("line.separator");

    public static void main(String[] args){

        try{
            FileWriter fw = new FileWriter("test.md");

            fw.write("abc"+LINE_SEPARATOR+"haha");

        } catch (IOException){
                System.out.println(e.toString());
        } finally{
            fw.close(); // 此时, fw 是局部变量, 只在 try 内部有效, 此时 fw 属于未定义变量
        }
    }
}

// 改进第一步:

public class IOException{

    // 获取系统默认的行分隔符
    private static final String LINE_SEPARATOR = System.getProperty("line.separator");

    public static void main(String[] args){

        FileWriter fw = null; // 创建流对象
        try{
            // 流对象初始化
            fw = new FileWriter("k:\\test.md");

            fw.write("abc"+LINE_SEPARATOR+"haha");

        } catch (IOException){
                System.out.println(e.toString());
        } finally{
            try{
                fw.close();// 此处有可能出现关闭失败的异常, 所以也许要 try catch
            } catch (IOException e){
                throw new RuntimeException("关闭失败");
            }
        }
    }
}

// 运行上述程序:

public class IOException{

    // 获取系统默认的行分隔符
    private static final String LINE_SEPARATOR = System.getProperty("line.separator");

    public static void main(String[] args){

        FileWriter fw = null;
        try{
            // 流对象初始化
            fw = new FileWriter("k:\\test.md"); // 此处出现异常: FileNotFoundException
                                                // 该异常是 IOException 的子类

            fw.write("abc"+LINE_SEPARATOR+"haha");

        } catch (IOException){
                System.out.println(e.toString);
        } finally{
            try{
                fw.close();  // 由于文件没有创建成功, 因此此处抛出 NUllPointerException
            } catch (IOException e){
                throw new RuntimeException("关闭失败");
            }
        }
    }
}

// 改进第二步:

public class IOException{

    // 获取系统默认的行分隔符
    private static final String LINE_SEPARATOR = System.getProperty("line.separator");

    public static void main(String[] args){

        FileWriter fw = null;
        try{
            // 流对象初始化
            fw = new FileWriter("k:\\test.md"); // 此处出现异常: FileNotFoundException
                                                // 该异常是 IOException 的子类

            fw.write("abc"+LINE_SEPARATOR+"haha");

        } catch (IOException){
                System.out.println(e.toString);
        } finally{
            if(fw != null) // 增加一条判断语句
            try{
                fw.close();  
            } catch (IOException e){
                throw new RuntimeException("关闭失败");
            }
        }
    }
}

参考资料:

posted @ 2017-09-10 20:49  小a的软件思考  阅读(529)  评论(0编辑  收藏  举报