跳转到内容

第8章 输入输出流与文件 — 在线单元测验

Java I/O 流与文件操作基础测验,涵盖 File 类、字节流、字符流、数据流、对象流、缓冲流、文件对话框等核心知识点。共 26 题(9 单选 + 17 填空)。


一、单选题(每题 2 分,共 9 题)

1. 文件输入流异常

String filename 表示文件名,执行以下语句,将会抛出 _________________ 异常。

InputStream in = new FileInputStream(filename);

选项

A

IOException

B

EOFException

C

ClassNotFoundException

D

FileNotFoundException

解析:当文件不存在时,FileInputStream 构造方法抛出 FileNotFoundException(它是 IOException 的子类)。


2. 数据字节输入流结束异常

当数据字节输入流结束时抛出 __________________ 异常。

选项

A

ClassNotFoundException

B

IOException

C

EOFException

D

FileNotFoundException

解析:DataInputStream 读取到末尾时抛出 EOFException(End Of File),它是 IOException 的子类。


3. 对象序列化异常

如果欲写入的对象没有实现序列化接口,则抛出 ________________ 异常。

选项

A

EOFException

B

FileNotFoundException

C

ClassNotFoundException

D

NotSerializableException

解析:使用 ObjectOutputStream.writeObject() 时,对象必须实现 java.io.Serializable 接口,否则抛出 NotSerializableException


4. File 类获取文件名

File 类声明返回文件名字符串(不包含绝对路径名)的方法是 ______________

选项

A

getPath()

B

getParent()

C

getAbsolutePath()

D

getName()

解析:getName() 返回文件名(不含路径);getPath() 返回构造时传入的路径;getAbsolutePath() 返回绝对路径。


5. File 类判断是否为目录

File 类声明判断当前文件对象是否为目录的方法是 ________________

选项

A

setReadOnly()

B

lastModified()

C

isDirectory()

D

isFile()

解析:isDirectory() 判断是否为目录,isFile() 判断是否为普通文件。


6. File 类获取最后修改时间

File 类声明返回文件的最后修改时间的方法是 _______________

选项

A

isFile()

B

lastModified()

C

setReadOnly()

D

isDirectory()

解析:lastModified() 返回 long 类型的时间戳(从 1970-01-01 开始的毫秒数)。


7. File 类创建目录

File 类声明创建指定目录的方法是 ________________

选项

A

createNewFile()

B

renameTo(File dest)

C

mkdir()

D

delete()

解析:mkdir() 创建单级目录;mkdirs() 创建多级目录(含所有不存在的父目录)。


8. Swing 文件选择对话框

javax.swing 包中文件选择对话框组件是 __________________

选项

A

JFileChooser

B

FileInputStream

C

FileReader

D

FileJDialog

解析:JFileChooser 是 Swing 提供的图形化文件选择对话框,FileInputStream / FileReader 是 I/O 流类。


9. 保存文件对话框方法

javax.swing.JFileChooser 组件显示保存文件选择对话框的方法是 ____________

选项

A

setFileFilter(filter)

B

getSelectedFile()

C

showOpenDialog(Component)

D

showSaveDialog(Component)

解析: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 类                          ← 文件/目录属性管理(不负责读写数据)

常见异常速查

异常

触发场景

FileNotFoundException

文件不存在时打开文件输入流

EOFException

数据流/对象流读取到末尾

NotSerializableException

写入未实现 Serializable 接口的对象

IOException

I/O 操作失败的通用异常(以上异常的父类)

装饰器模式

Java I/O 流大量使用装饰器模式(Wrapper 模式),将基础流层层包装获取增强能力:

FileOutputStream → DataOutputStream  (字节 + 基本类型)
FileOutputStream → ObjectOutputStream(字节 + 对象序列化)
FileReader → BufferedReader          (字符 + 缓冲 + 按行读取)