![Java核心技术·卷Ⅱ:高级特性(原书第10版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/937/34339937/b_34339937.jpg)
上QQ阅读APP看书,第一时间看更新
2.2.3 以文本格式存储对象
在本节,我们将带你领略一个示例程序,它将一个Employee记录数组存储成了一个文本文件,其中每条记录都保存成单独的一行,而实例字段彼此之间使用分隔符分离开,这里我们使用竖线(|)作为分隔符(冒号(:)是另一种流行的选择,有趣的是,每个人都会使用不同的分隔符)。因此,我们这里是在假设不会发生在要存储的字符串中存在|的情况。
下面是一个记录集的样本:
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/052-2-i.jpg?sign=1738906052-fDJgW4u3leEin1sSQGhuaRyRnf4u0yz4-0-620293468ece3166598ece7e10212cee)
写出记录相当简单,因为我们是要写出到一个文本文件中,所以我们使用PrintWriter类。我们直接写出所有的字段,每个字段后面跟着一个|,而最后一个字段的后面跟着一个\n。这项工作是在下面这个我们添加到Employee类中的writeEmployee方法里完成的:
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/052-3-i.jpg?sign=1738906052-A0IKRl5QVABbmmDlsv9RUJ1xCXzHDxML-0-a5c078416e8f38f4b3a2fc0330cc0cc6)
为了读入记录,我们每次读入一行,然后分离所有的字段。我们使用一个扫描器来读入每一行,然后用String.split方法将这一行断开成一组标记。
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/052-4-i.jpg?sign=1738906052-klL2Tp7yWwix2ilxsZDaD3hKyh40w0s5-0-c4fe07333edf06224aec01b7de08c51c)
split方法的参数是一个描述分隔符的正则表达式,我们在本章的末尾将详细讨论正则表达式。碰巧的是,竖线在正则表达式中具有特殊的含义,因此需要用\字符来表示转义,而这个\又需要用另一个\来转义,这样就产生了“\\|”表达式。
完整的程序如程序清单2-1所示。静态方法
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/053-i.jpg?sign=1738906052-UsTHEeaqj14BgcxlzJMz7WBNr1keDzvx-0-e00d5507796e0de00e9b2d008b12d7d6)
首先写出该数组的长度,然后写出每条记录。静态方法
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/053-2-i.jpg?sign=1738906052-lRBYt1fW0Mv1mdXllLRf2Zdj5rqGhRoH-0-acec94125b656541097a51bc8cf54868)
首先读入该数组的长度,然后读入每条记录。这显得稍微有点棘手:
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/053-3-i.jpg?sign=1738906052-a8k4I7ASINn2jOCh4orbIm0BOTwboZQG-0-cd777d65506fc682c25fab056813079e)
对nextInt的调用读入的是数组长度,但不包括行尾的换行字符,我们必须处理掉这个换行符,这样,在调用nextLine方法后,readData方法就可以获得下一行输入了。
程序清单2-1 textFile/TextFileTest.java
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/053-4-i.jpg?sign=1738906052-D1WCWLLguWva9eWPhNQFlv7ijj9gMl9T-0-83ccb04878e1d07906dcc3aa957a44e7)
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/054-i.jpg?sign=1738906052-WES3VtlagAxa2cTCn39F41qX3p8owLFz-0-a992f25621f69814921756dd5d1cfcb5)
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/055-i.jpg?sign=1738906052-OBaGxcGsZ0BNtscMJG2wkZEyYQsD5sSH-0-2a143802551711f6c0e8c6a8edbaa68b)