- Java核心技术·卷Ⅱ:高级特性(原书第10版)
- (美)凯S.霍斯特曼
- 587字
- 2024-12-20 22:35:58
2.2.3 以文本格式存储对象
在本节,我们将带你领略一个示例程序,它将一个Employee记录数组存储成了一个文本文件,其中每条记录都保存成单独的一行,而实例字段彼此之间使用分隔符分离开,这里我们使用竖线(|)作为分隔符(冒号(:)是另一种流行的选择,有趣的是,每个人都会使用不同的分隔符)。因此,我们这里是在假设不会发生在要存储的字符串中存在|的情况。
下面是一个记录集的样本:
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/052-2-i.jpg?sign=1739553319-lpjSrsFncl8KLDlllxiY3ctw22m4Yip4-0-8ca2e79c3410e66a7c0fdaff2be82c79)
写出记录相当简单,因为我们是要写出到一个文本文件中,所以我们使用PrintWriter类。我们直接写出所有的字段,每个字段后面跟着一个|,而最后一个字段的后面跟着一个\n。这项工作是在下面这个我们添加到Employee类中的writeEmployee方法里完成的:
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/052-3-i.jpg?sign=1739553319-SjkFJFQGXntRrbjDnkRRdyN4UdWuJ6Ut-0-fcc1312d6c13dd57fb229acabafd02a9)
为了读入记录,我们每次读入一行,然后分离所有的字段。我们使用一个扫描器来读入每一行,然后用String.split方法将这一行断开成一组标记。
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/052-4-i.jpg?sign=1739553319-wXvZLo4ed85daMIvSOlR9BYMa9qeF5Oc-0-b68873437f3c365557d57a61024854e6)
split方法的参数是一个描述分隔符的正则表达式,我们在本章的末尾将详细讨论正则表达式。碰巧的是,竖线在正则表达式中具有特殊的含义,因此需要用\字符来表示转义,而这个\又需要用另一个\来转义,这样就产生了“\\|”表达式。
完整的程序如程序清单2-1所示。静态方法
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/053-i.jpg?sign=1739553319-3H18k3OwUMW7cUBq5HiLkyUXxyG5n3F8-0-d4ea35171c978b22d42bd4614a1b2f2b)
首先写出该数组的长度,然后写出每条记录。静态方法
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/053-2-i.jpg?sign=1739553319-KOQOrp8F7SR76NMQTdz3KrvbrIhy2Obh-0-8c6125d57d485a9c1c15281b1aa5e13b)
首先读入该数组的长度,然后读入每条记录。这显得稍微有点棘手:
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/053-3-i.jpg?sign=1739553319-LAFmRi2RwcOoqCFnFwAe7YsNMwl8eiaM-0-71ac23fa70051879a974f2d43dd366fd)
对nextInt的调用读入的是数组长度,但不包括行尾的换行字符,我们必须处理掉这个换行符,这样,在调用nextLine方法后,readData方法就可以获得下一行输入了。
程序清单2-1 textFile/TextFileTest.java
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/053-4-i.jpg?sign=1739553319-FDvn7ulthdBlQ2GcaVEA0FlgfEhbIj18-0-79b7c011c64c07edd303519312fe6c96)
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/054-i.jpg?sign=1739553319-N9FgbitAHEg7CHk1JRvQS2vPLi2coOkR-0-a1d2ab6937c61514942bd1282d8053fb)
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/055-i.jpg?sign=1739553319-N2Z4Pn43L6bz8APFiWY5uWJkZByk6zlj-0-183b3dbbfa043797afa9de01fd0f8d0b)