想要查看此教程的目录请点击:Java IO教程目录贴地址

Streams或Readers/Writers在使用过程中需要是可关闭的。这需要调用close()方法。这需要一点儿思考,看下面的代码:

InputStream input = new FileInputStream("c:\\data\\input-text.txt");

int data = input.read();

while(data != -1) {

//do something with data...

doSomethingWithData(data);

data = input.read();

}

input.close();

这段代码看起来很好。但是如果doSomethingWithData()方法抛出异常会发生什么?对的!如果发生异常InputStream就不会被关闭了!

下面的代码避免了这样的问题:

InputStream input = null;

try{

input = new FileInputStream("c:\\data\\input-text.txt");

int data = input.read();

while(data != -1) {

//do something with data...

doSomethingWithData(data);

data = input.read();

}

}catch(IOException e){

//do something with e... log, perhaps rethrow etc.

} finally {

if(input != null) input.close();

}

注意一下现在InputStream是怎么样在finally下关闭的。不管在try代码块中发生了什么,finally中的代码都会被执行。所以InputStream总是会被关闭。

但是close()方法如果抛出异常会发生什么?是说stream已经被关闭了?好吧,你可能要用try-catch去catch住这个异常,像下面这样:

} finally {

try{

if(input != null) input.close();

} catch(IOException e){

//do something, or ignore.

}

}

这样嵌套的去处理问题,看起来非常丑陋,尽管解决了问题。这样不优雅的异常处理代码并不够好,他可以在你的代码中重复的传播。如果写代码时候比较匆忙,忘记异常处理该怎么办?

想象一下如果从doSomethingWithData()抛出一个异常,第一个catch捕捉到那个异常,InputStream在finally关闭。但是,如果从input.close()方法抛出一个异常会发生什么?两个异常中的哪一个应该被传播到调用堆栈?

Java 7中Java IO 的异常处理

Java7开始有一个新的异常处理机制叫做“try with resources”,它是一个语法糖。这个异常处理机制特别的地方在于你使用资源时需要在使用后关闭,那么用它可以解决这个问题,例如使用InputStream,OutputStream时等等。想要学习和它更多相关的内容可以去Try With Resources in Java 7

.

.

java ioexception异常_12. Java IO: 异常处理相关推荐

  1. java 抛异常给上级_java异常处理机制(示例代码)

    Exception 类的层次 java中所有的异常类是从 java.lang.Exception 类继承的子类. 而Exception 类是 Throwable (可抛出的)类的子类.除了Except ...

  2. java 多层异常_Java多层嵌套异常处理的基本流程

    异常是程序中的一些错误,但并不是所有的错误都是异常,错误有时候是可以避免的.异常的对象有两个来源,一是Java运行时环境自动抛出系统生成的异常,而不管你是否愿意捕获和处理,它总要被抛出!比如除数为0的 ...

  3. java框架异常怎么处理_java异常处理与处理框架-笔记

    1.Java异常分为checked异常和unchecked异常 checked异常(需要在代码中try--catch显示捕获) 所有继承java.lang.Exception的异常.是可以在执行过程中 ...

  4. Java SQL异常:java.sql.SQLException: Incorrect DATE value: ‘2021.02.31‘

    报错信息: Cause: java.sql.SQLException: Incorrect DATE value: '2021.02.31' ; uncategorized SQLException; ...

  5. JAVA捕捉输入格式异常_Java学习(四).异常处理

    异常处理 任何一个软件或程序都可能在运行的过程中出现故障,问题的关键是故障出现以后如何处理?谁来处理?怎样处理?处理后系统能否恢复正常的运行?本章在介绍Java处理这类问题基本方法的基础上,讨论包含异 ...

  6. JAVA常见异常信息(保存)

    一. java基础编程中常见的错误(基本类型) 包装类型参与运算时,要做null值校验,否则可能出现空指针异常. 包装类型比较大小,不能使用compare(i,j)直接比较,因为该方法是用来比较基本类 ...

  7. POST 请求出现异常!java.io.IOException: Server returned HTTP response code: 400 for URL

    http发送post请求报400,405 报错如下: 发送 POST 请求出现异常!java.io.IOException: Server returned HTTP response code: 4 ...

  8. 发送 POST 请求出现异常!java.io.IOException: Server returned HTTP response code: 400 for URL:

    http发送post请求报400,405,记录下原因: 报错如下: 发送 POST 请求出现异常!java.io.IOException: Server returned HTTP response ...

  9. java程序经过编译后会产生byte code_学习廖雪峰的JAVA教程---异常处理(Java的异常)...

    在计算机程序运行的过程中,总是会出现各种各样的错误. 有一些错误是用户造成的,比如,希望用户输入一个int类型的年龄,但是用户的输入是abc: // 假设用户输入了abc:String s = &qu ...

最新文章

  1. [YTU]_2384( 矩形类中运算符重载【C++】)
  2. 复制Hadoop目录至其他节点时的注意点
  3. 【一遍过!!!】1014 Waiting in Line (30 分)(题意+分析)
  4. Spring Boot之程序性能监控
  5. (需求实战_进阶_04)SSM集成RabbitMQ 通配符模式 关键代码讲解、开发、测试
  6. WordPress post和page的区别
  7. 鼠标在某个控件上按下,然后离开后弹起,如何捕获这个鼠标弹起事件
  8. 『TensorFlow Internals』笔记_系统架构
  9. 防爆破登录:配置/etc/hosts.deny禁止ip尝试ssh或者telnet操作
  10. 计算机将会代替老师吗英语范文,英文作文电脑对教育的重要意义
  11. 分享怎样自己做网站赚钱年入40万
  12. 一、IOS CocoaPods详细使用方法
  13. vue插槽的理解 slot slot-scop,三种插槽方式,默认插槽,具名插槽,作用域插槽
  14. Data.gov.uk电子政务云,牛津大学NIE金融大数据实验室王宁:数据治理的现状和实践...
  15. 计算机语言中a 什么意思,"i=!a"在c语言中什么意思
  16. java集成友盟实现推送
  17. 计算机不能读手机内存不足,手机装内存卡只读不写手机64G内存卡32G,64用完显示还剩32G但警告空间不足...
  18. 7月20HashMap、集合、HashSet
  19. 珠海网站建设价格是多少
  20. 掌优刷脸支付刷出移动支付新热度

热门文章

  1. 浅谈mysql的子查询
  2. 在多线程中使用UDP
  3. 将TUM数据集制作成BundleFusion数据集
  4. 红外线摄像机的选择与使用及原理
  5. 大数据时代下的迁移学习_继深度学习后,下一个热点技术是迁移学习
  6. java executor_Java并发编程(08):Executor线程池框架
  7. hosts多个ip对应一个主机名_一个简单的Web应用程序,用作连接到ssh服务器的ssh客户端...
  8. mysql 文件描述符_MySQL没有发布临时文件描述符
  9. Jena Fuseki安装完成后不能添加数据库
  10. java中方法的参数传递机制