
上QQ阅读APP看书,第一时间看更新
2.2.3 以文本格式存储对象
在本节,我们将带你领略一个示例程序,它将一个Employee记录数组存储成了一个文本文件,其中每条记录都保存成单独的一行,而实例字段彼此之间使用分隔符分离开,这里我们使用竖线(|)作为分隔符(冒号(:)是另一种流行的选择,有趣的是,每个人都会使用不同的分隔符)。因此,我们这里是在假设不会发生在要存储的字符串中存在|的情况。
下面是一个记录集的样本:

写出记录相当简单,因为我们是要写出到一个文本文件中,所以我们使用PrintWriter类。我们直接写出所有的字段,每个字段后面跟着一个|,而最后一个字段的后面跟着一个\n。这项工作是在下面这个我们添加到Employee类中的writeEmployee方法里完成的:

为了读入记录,我们每次读入一行,然后分离所有的字段。我们使用一个扫描器来读入每一行,然后用String.split方法将这一行断开成一组标记。

split方法的参数是一个描述分隔符的正则表达式,我们在本章的末尾将详细讨论正则表达式。碰巧的是,竖线在正则表达式中具有特殊的含义,因此需要用\字符来表示转义,而这个\又需要用另一个\来转义,这样就产生了“\\|”表达式。
完整的程序如程序清单2-1所示。静态方法

首先写出该数组的长度,然后写出每条记录。静态方法

首先读入该数组的长度,然后读入每条记录。这显得稍微有点棘手:

对nextInt的调用读入的是数组长度,但不包括行尾的换行字符,我们必须处理掉这个换行符,这样,在调用nextLine方法后,readData方法就可以获得下一行输入了。
程序清单2-1 textFile/TextFileTest.java


