当前位置: 首页 > 面试题库 >

您是否见过Java文件close()抛出异常?

齐修贤
2023-03-14
问题内容

有没有人见过在任何可关闭对象上调用close方法时引发异常的情况?


问题答案:

IOException会就被抛出close,如果最终flush失败。可能的原因包括:

  • 文件系统已满,或用户超出配额,
  • 硬盘错误
  • 文件系统被强行卸载,
  • 由于网络或其他问题,远程文件系统不可用,
  • (可能是)通过OutputStreamWriter或类似方式写入文件的字符编码错误,
  • 如果“文件”是设备文件,则设备错误,
  • 如果可关闭设备是网络流,则失去连接,
  • 如果封闭容器是通向外部过程的管道,则该管道破裂;
  • 等等。

我当然已经看过其中一些。其他可能性不大。

但是,如果要写入的数据很重要,则应该允许close失败。例如,如果您的应用程序正在写出文件已填满的关键文件,则您的应用程序最好在用截断的版本替换文件的旧副本之前注意到这一点。



 类似资料:
  • 问题内容: 考虑以下代码: 无需添加方法签名即可编译该代码。(它与同样表现到位,太)。 我理解为什么 可以 安全地运行它,因为实际上不能将其引发在块中,因此不能引发已检查的异常。我有兴趣知道在何处指定此行为。 并非永远都不会达到目标:以下代码也会编译: 但是,如果抛出一个检查的异常,它不会像我期望的那样编译: 在JLS Sec 11.2.2中 ,它说: 一,其抛出的表达式语句(§14.18)具有静

  • 根据我读到的其他问题(为什么重写方法不能抛出比重写方法更广的异常?以及Java方法抛出异常) 我知道子类中的重写方法必须抛出在重写方法中抛出的异常的相同或一个子类。 Java方法总是至少抛出一个类型为exception的异常吗? ...换句话说,编译器添加抛出异常 因此类X将如下所示 我想澄清的是,对于始终添加默认异常处理程序异常这一事实,我没有搞错。 相关问题: IOException与Runt

  • 抛出异常的行为是否可能抛出不同的异常? 为了抛出异常,必须(可选地)分配新对象,并调用其构造函数(隐式调用fillinstacktrace)。在某些情况下,听起来像addSupressed也被称为。那么如果没有足够的内存会发生什么呢?JVM是否需要预分配内置异常?例如,(1/0)会抛出OutOfMemoryError而不是ArithmeticException吗? 此外,构造函数是一个方法调用,因

  • 问题内容: 我目前正在使用play2框架。 我有几个正在抛出的类,但是play2s全局处理程序使用throwable而不是异常。 例如我的一门课是抛出一个。我是否可以检查可抛物体(如果是)? 问题答案: 您可以使用它来检查它是否存在。 例: 假设是参考。

  • 问题内容: 如果这是错误的,请纠正我:在Java 7的try-with- resources语句中,资源方法抛出的任何异常都必须声明为我的方法抛出,或者我必须将整个try包裹在另一个捕获抛出的异常的方法中。 如果是这样,我想知道我是否会充分利用它。我当然不希望抛出异常,调用者将不知道该如何处理。至少对我来说,一个只用来处理的包裹看起来并不优雅。 编辑: 我想我不小心问了两个问题,其中一个是重复的。

  • 我知道一种方法是: 有什么更干净的方法吗?(可能使用JUnit的?)