【问题标题】:Exception for classes I/O类 I/O 的例外情况
【发布时间】:2019-08-14 19:57:21
【问题描述】:

我正在为 OCP 考试学习这些 I/O 类:

  • OutputStream 子类:

    • 文件输出流
    • 缓冲输出流
    • 数据输出流
    • PrintStream(我看到它的方法 write() 不会抛出异常)
  • 作家子类:

    • 文件编写器
    • BufferedWriter
    • PrintWriter(我看到它的方法 write() 不会抛出异常)
  • 阅读器子类:

    • 文件阅读器
    • 缓冲读取器
  • InputStream 子类:

    • 缓冲输入流
    • 过滤输入流
    • 对象输入流

我的问题: 对于 read 和 write 的主要方法(具有不同的签名),这些类中的每一个什么时候抛出 IOException?在 javadoc 中只有一个短语:

IOException - 如果发生 I/O 错误

没有对案件的解释。

我知道(我不知道这些是否正确):

  • 如果文件不存在,FileOutputStream 会抛出 java.io.FileNotFoundException。事实上,这个类不会创建文件;

  • 如果文件不存在,FileWriter 会抛出 java.io.FileNotFoundException。这个类实际上不会创建文件;

  • 如果文件不存在,BufferedReader 会抛出 java.nio.file.NoSuchFileException(IOException 的子类);

  • 如果文件不存在,FileInputStream 会抛出 java.io.FileNotFoundException。

非常感谢!

一个。

【问题讨论】:

  • 创建 FileWriter/OutputStream 确实会创建文件。故意含糊其辞:任何 IO 问题都会导致抛出 IOException。例如,如果文件在读/写时被删除。或者如果硬盘损坏。或者如果没有剩余空间可以写入,或者操作系统以某种方式拒绝读取或写入(因为网络驱动器上存在网络错误,或者因为存在权限问题)。这可能是很多事情。

标签: java exception io ioexception


【解决方案1】:

如果您在 Google 上搜索该类的 API 文档,通常 Javadocs 会解释在什么情况下会引发什么异常,例如为了 文件编写器

https://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html

【讨论】:

    【解决方案2】:

    任何这些类在执行期间遇到问题时都会引发 I/O 异常。如果出现以下情况,文件输出流可能会引发异常:

    • 文件不存在
    • 文件是只读的
    • 操作系统拒绝访问文件
    • 您要写入的驱动器空间不足

    输入流通常在以下情况下抛出异常:

    • 流未正确初始化
    • 输入类型未匹配
    • 如果正在读取的文件在读取时发生更改
    • 如果文件不存在。

    【讨论】:

    • 如果你想要特定的异常类,只需谷歌“____时____会抛出什么异常”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 2011-12-25
    相关资源
    最近更新 更多