【发布时间】: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