Java文件输入输出:AddressBookStorage类的实现与应用
立即解锁
发布时间: 2025-08-17 02:24:58 阅读量: 2 订阅数: 14 

### Java文件输入输出:AddressBookStorage类的实现与应用
#### 1. 引言
在Java编程中,文件输入输出(I/O)操作是非常重要的一部分。本文将详细介绍如何实现一个用于管理`AddressBook`对象文件I/O的类`AddressBookStorage`,并通过具体的代码示例和测试程序来展示其功能。
#### 2. 问题描述与整体规划
我们的目标是编写一个类来管理`AddressBook`对象的文件I/O。在开始设计这个类之前,需要对实现`AddressBook`接口的类进行修改,添加`implements Serializable`语句,例如:
```java
import java.io.*;
class AddressBookVer1 implements AddressBook, Serializable {
//same as before
}
```
这样修改后,就可以存储`AddressBookVer1`类的实例了。我们将这个处理文件I/O操作的类命名为`AddressBookStorage`,遵循单任务对象(STO)原则,该类仅负责`AddressBook`对象的文件I/O,不涉及用户界面等其他操作。
这个类应该支持两个核心的公共方法:`write`和`read`,用于将`AddressBook`对象写入文件和从文件中读取对象。调用示例如下:
```java
filer.write(addressBook);
addressBook = filer.read();
```
为了让`AddressBookStorage`类知道要读写的文件,有两种方式可以让程序员指定文件:一种是通过构造函数传递文件名,另一种是定义一个`setFile`方法来设置文件。我们将同时支持这两种方式,并且不提供无参数的构造函数,以确保程序员在创建`AddressBookStorage`对象时指定文件名。
类的实现将按照以下顺序进行:
1. 实现构造函数和`setFile`方法。
2. 实现`write`方法。
3. 实现`read`方法。
4. 完成类的最终完善。
#### 3. 步骤1:构造函数和setFile方法的实现
在这一步中,我们需要确定数据成员并定义构造函数来初始化它们,同时实现`setFile`方法。虽然在进行对象I/O时需要`File`、`FileInputStream`、`FileOutputStream`、`ObjectInputStream`和`ObjectOutputStream`等对象,但为了避免不必要的数据成员和重复操作,我们只使用一个`String`类型的变量`filename`来保存文件名。
以下是`AddressBookStorage`类的代码:
```java
/*
Chapter 12 Sample Program: Address Book Storage
File: AddressBookStorage.java
*/
class AddressBookStorage {
private String filename;
public AddressBookStorage (String filename) {
setFile(filename);
}
public void setFile(String filename) {
this.filename = filename;
System.out.println("Inside setFile. Filename is " + filename);
//TEMP
}
}
```
为了测试这个类,我们编写了一个测试程序:
```java
/*
Chapter 12 Sample Program: Driver class to test
the skeleton AddressBookStorage
File: TestAddressBookStorage.java (Step 1)
*/
class TestAddressBookStorage {
public static void main (String[] args) {
AddressBookStorage fileManager;
fileManager = new AddressBookStorage("one.data");
fileManager.setFile("two.data");
fileManager.setFile("three.data");
}
}
```
这个测试程序验证了我们可以创建`AddressBookStorage`对象并正确使用`setFile`方法。
#### 4. 步骤2:实现write方法
在第二步中,我们将实现`write`方法。该方法从数据成员`filename`创建一个`ObjectOutputStream`对象,并将参数`AddressBook`对象写入该流。由于创建`ObjectOutputStream`对象的一系列方法调用可能会抛出`IOException`,根据STO原则,该方法将抛出这个异常,让调用者决定如何处理。
以下是`AddressBookStorage`类中`write`方法的代码:
```java
/*
Chapter 12 Sample Program: The class that provides the
file I/O for AddressBook
File: AddressBookStorage.java
*/
import java.io.*;
class AddressBookStorage {
...
public void write(AddressBook book) throws IOException {
//first create an ObjectOutputStream
File outFile = new File(filename);
FileOutputStream outFileStream = new FileOutputStream(outFile);
ObjectOutputStream outObjectStream = new ObjectOutputStream(outFileStream);
//save the data to it
outObjectStream.writeObject(book);
//and close it
outObjectStream.close();
}
}
```
为了验证数据是否成功保存到文件中,我们编写了一个测试程序:
```java
/*
Chapter 12 Sample Program: Test the write method
File: T
```
0
0
复制全文
相关推荐








