【问题标题】:Is there ever a case when IO exceptions are thrown?是否有抛出 IO 异常的情况?
【发布时间】:2014-03-11 15:46:45
【问题描述】:

我从未见过任何在 java io 操作期间引发 IO 异常的示例。每次我都看到它被抓住。对于所有实际目的,它是否真的不需要被抛出?如果我对上一个问题的回答不正确,那么thrown 是在哪种现实生活场景下?

【问题讨论】:

  • 磁盘故障、FS 损坏等...发生了嘘!
  • 您真的从未见过 IO 异常吗?您从未尝试写入不存在的文件,或者与远程套接字的连接流您的写入被意外切断?这对我来说似乎很有趣,因为当我第一次遇到 OOP 课程时,我想我几乎没有进入大学的第一门 OOP 课程。
  • 您真的从未见过 IO 异常吗?我见过它,但看到它被抓住了,而不是被扔了
  • 我不明白区别......你对抛出的异常所做的事情是无关紧要的,事实仍然是必须抛出它才能被捕获。除非您的意思是您只看到了 catch 语句,但在运行时无法访问它们。在这种情况下,我建议尝试写入一个被另一个进程锁定的文件,或者一个不存在的文件。跨度>

标签: java exception io


【解决方案1】:

是的,比如说一个用户刚刚点击了“显示订单”按钮,代码如下:

List<Order> orders = getOrdersFromDatabase();
showOrdersInTable(orders);

public List<Order> getOrdersFromDatabase() throws IOException {... }

不幸的是,某个愚蠢的家伙只是为了好玩而决定切断服务器的电源线(好吧:他刚刚被解雇了)。运行数据库的服务器现在无法访问。

您的代码可以:

  • 忽略异常,您的应用程序将静默失败,没有人知道发生了什么
  • 让异常传播到您的主程序而不捕获它,您的应用程序将严重崩溃
  • 在适当的抽象层捕获并处理异常,您可以在其中记录错误的详细信息并警告用户:showPopup("Sorry, the server xyz can't be reach right now, do you want to retry or abort?");

【讨论】:

    【解决方案2】:

    当您谈论IOException 时,您也会谈论继承它的所有异常。其中例如有FileNotFoundException(旧文件API——沟),也有ReadOnlyFilesystemExceptionNotDirectoryExceptionAccessDeniedException等(新文件API——使用)。

    因此,是的,实际上有 很多IOExceptions 被抛出。

    【讨论】:

      猜你喜欢
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-28
      相关资源
      最近更新 更多