第8章 输入输出流与文件 — 在线单元测验
Java I/O 流与文件操作基础测验,涵盖 File 类、字节流、字符流、数据流、对象流、缓冲流、文件对话框等核心知识点。共 26 题(9 单选 + 17 填空)。
一、单选题(每题 2 分,共 9 题)
1. 文件输入流异常
设 String filename 表示文件名,执行以下语句,将会抛出 _________________ 异常。
InputStream in = new FileInputStream(filename);
|
|
选项 |
|---|---|
|
A |
|
|
B |
|
|
C |
|
|
D |
|
解析:当文件不存在时,FileInputStream 构造方法抛出 FileNotFoundException(它是 IOException 的子类)。
2. 数据字节输入流结束异常
当数据字节输入流结束时抛出 __________________ 异常。
|
|
选项 |
|---|---|
|
A |
|
|
B |
|
|
C |
|
|
D |
|
解析:DataInputStream 读取到末尾时抛出 EOFException(End Of File),它是 IOException 的子类。
3. 对象序列化异常
如果欲写入的对象没有实现序列化接口,则抛出 ________________ 异常。
|
|
选项 |
|---|---|
|
A |
|
|
B |
|
|
C |
|
|
D |
|
解析:使用 ObjectOutputStream.writeObject() 时,对象必须实现 java.io.Serializable 接口,否则抛出 NotSerializableException。
4. File 类获取文件名
File 类声明返回文件名字符串(不包含绝对路径名)的方法是 ______________。
|
|
选项 |
|---|---|
|
A |
|
|
B |
|
|
C |
|
|
D |
|
解析:getName() 返回文件名(不含路径);getPath() 返回构造时传入的路径;getAbsolutePath() 返回绝对路径。
5. File 类判断是否为目录
File 类声明判断当前文件对象是否为目录的方法是 ________________。
|
|
选项 |
|---|---|
|
A |
|
|
B |
|
|
C |
|
|
D |
|
解析:isDirectory() 判断是否为目录,isFile() 判断是否为普通文件。
6. File 类获取最后修改时间
File 类声明返回文件的最后修改时间的方法是 _______________。
|
|
选项 |
|---|---|
|
A |
|
|
B |
|
|
C |
|
|
D |
|
解析:lastModified() 返回 long 类型的时间戳(从 1970-01-01 开始的毫秒数)。
7. File 类创建目录
File 类声明创建指定目录的方法是 ________________。
|
|
选项 |
|---|---|
|
A |
|
|
B |
|
|
C |
|
|
D |
|
解析:mkdir() 创建单级目录;mkdirs() 创建多级目录(含所有不存在的父目录)。
8. Swing 文件选择对话框
javax.swing 包中文件选择对话框组件是 __________________。
|
|
选项 |
|---|---|
|
A |
|
|
B |
|
|
C |
|
|
D |
|
解析:JFileChooser 是 Swing 提供的图形化文件选择对话框,FileInputStream / FileReader 是 I/O 流类。
9. 保存文件对话框方法
javax.swing.JFileChooser 组件显示保存文件选择对话框的方法是 ____________。
|
|
选项 |
|---|---|
|
A |
|
|
B |
|
|
C |
|
|
D |
|
解析:showSaveDialog() 显示保存对话框;showOpenDialog() 显示打开对话框;getSelectedFile() 获取用户选中的文件。
二、填空题(每题 2 分,共 17 题)
10.
实现流和文件操作,必须导入 ______________ 包。
答案:java.io
11.
InputStream 类中的 read() 抽象方法从字节流中每次读取 ______ 个字节。
答案:1(一个字节,返回 int 类型的 0~255 值,-1 表示流结束)
12.
设 String filename 表示文件名,创建文件字节输出流对象如下。
OutputStream out = new _________________(filename);
答案:FileOutputStream
13.
设 String filename 表示文件名,以下从文件字节输出流创建数据字节输出流。
OutputStream out = new FileOutputStream(filename);
DataOutputStream dataout = new ________________;
答案:DataOutputStream(out)
装饰器模式:DataOutputStream 包装 FileOutputStream,为字节流添加写入基本类型的能力。
14.
已知 DataOutputStream 数据字节输出流类声明以下方法:
public final void writeInt(int i) throws IOException // 写入int整数,4字节
设 JComboBox<Integer> combox = …,DataOutputStream dataout = …,调用语句如下:
________________((Integer)combox.getItemAt(i)); // 将int写入流
答案:dataout.writeInt
15.
DataInputStream 流类声明以下方法的返回值类型是 ________________。
public final __________ readInt() throws IOException
答案:int
该方法从流中读取 4 个字节并返回 int 值。
16.
设 String filename 表示文件名,以下从文件字节输出流创建对象字节输出流。
OutputStream out = new FileOutputStream(filename);
ObjectOutputStream objout = new ________________;
答案:ObjectOutputStream(out)
17.
已知 ObjectOutputStream 对象字节输出流类声明以下方法:
public final void writeObject(Object obj) throws IOException // 写对象
设 DefaultTableModel tablemodel = …,ObjectOutputStream objout = …,调用语句如下:
________________(tablemodel.getValueAt(i,j)); // 写入表格单元格中的对象
答案:objout.writeObject
18.
ObjectInputStream 流类声明以下方法的返回值类型是 ________________。
public final __________ readObject() throws IOException
答案:Object
读取后需强制类型转换为实际类型,如 (String) objin.readObject()。
19.
设 DataInputStream datain = …,调用语句如下,其他语句省略。
int rows = ________________; // 读取一个int作为表格行数
答案:datain.readInt()
20.
设 DefaultListModel<T> listmodel = …,ObjectInputStream objin = …,调用语句如下:
listmodel.addElement((T)________________); // 列表框模型添加对象
答案:objin.readObject()
21.
设 String filename 表示文件名,创建文件字符输出流对象如下。
Writer wr = new _________________(filename);
答案:FileWriter
字节流用 FileOutputStream,字符流用 FileWriter。
22.
已知 Writer 抽象字符输出流类声明如下方法:
public void write(String str) throws IOException // 将str串写入字符输出流
设 JTextArea text = …,Writer wr = …,调用语句如下:
________________(text.getText()); // 写入文本区中的字符串
答案:wr.write
23.
设 String filename 表示文件名,以下从文件字符输入流创建缓冲字符输入流。
Reader reader = new FileReader(filename);
BufferedReader bufrd = new ________________;
答案:BufferedReader(reader)
装饰器模式:BufferedReader 包装 FileReader,提供 readLine() 等高效读取方法。
24.
已知 BufferedReader 缓冲字符输入流类声明如下方法:
public String readLine() throws IOException // 读取一行字符串,输入流结束时返回null
设 JTextArea text = …,BufferedReader bufrd = …,String line = …,调用语句如下:
while ((line = ________________) != null)
答案:bufrd.readLine()
逐行读取文件的经典模式,直到 readLine() 返回 null。
25.
java.io 包中记载文件属性的类名是 _______________。
答案:File
File 类表示文件或目录的抽象路径名,不负责文件内容的读写(读写由流类完成)。
26.
设 String filename 表示文件名,以下创建文件对象。
File file = new ________________;
答案:File(filename)
知识点总结
Java I/O 流体系
java.io 包
├── 字节流(以 byte 为单位)
│ ├── InputStream(抽象类)
│ │ ├── FileInputStream ← 文件字节输入
│ │ ├── DataInputStream ← 读取基本类型(readInt/readDouble/...)
│ │ ├── ObjectInputStream ← 读取对象(readObject)
│ │ └── BufferedInputStream ← 带缓冲的字节输入
│ └── OutputStream(抽象类)
│ ├── FileOutputStream ← 文件字节输出
│ ├── DataOutputStream ← 写入基本类型(writeInt/writeDouble/...)
│ ├── ObjectOutputStream ← 写入对象(writeObject)
│ └── BufferedOutputStream ← 带缓冲的字节输出
│
├── 字符流(以 char 为单位)
│ ├── Reader(抽象类)
│ │ ├── FileReader ← 文件字符输入
│ │ ├── BufferedReader ← 缓冲字符输入(readLine)
│ │ └── InputStreamReader ← 字节→字符桥梁
│ └── Writer(抽象类)
│ ├── FileWriter ← 文件字符输出
│ ├── BufferedWriter ← 缓冲字符输出
│ └── OutputStreamWriter ← 字符→字节桥梁
│
└── File 类 ← 文件/目录属性管理(不负责读写数据)
常见异常速查
|
异常 |
触发场景 |
|---|---|
|
|
文件不存在时打开文件输入流 |
|
|
数据流/对象流读取到末尾 |
|
|
写入未实现 Serializable 接口的对象 |
|
|
I/O 操作失败的通用异常(以上异常的父类) |
装饰器模式
Java I/O 流大量使用装饰器模式(Wrapper 模式),将基础流层层包装获取增强能力:
FileOutputStream → DataOutputStream (字节 + 基本类型)
FileOutputStream → ObjectOutputStream(字节 + 对象序列化)
FileReader → BufferedReader (字符 + 缓冲 + 按行读取)