![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=1739361023-bIZAjtWznu1bMEA0ZkX0GKC4Yf3dNE4C-0-1abd9ab1bc95ac188dd3b1ab1b6dbda9)
写出记录相当简单,因为我们是要写出到一个文本文件中,所以我们使用PrintWriter类。我们直接写出所有的字段,每个字段后面跟着一个|,而最后一个字段的后面跟着一个\n。这项工作是在下面这个我们添加到Employee类中的writeEmployee方法里完成的:
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/052-3-i.jpg?sign=1739361023-u6WSfKnQxeFy0iMshXNk95v4u6lHxcLr-0-6fce3671703d8dfc5d25fc869b86081c)
为了读入记录,我们每次读入一行,然后分离所有的字段。我们使用一个扫描器来读入每一行,然后用String.split方法将这一行断开成一组标记。
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/052-4-i.jpg?sign=1739361023-lL6nV8vdYvVDRQSlyDxIeoa6Kkc7BuC2-0-919ea89107ffa207c9bdd48daacea5e6)
split方法的参数是一个描述分隔符的正则表达式,我们在本章的末尾将详细讨论正则表达式。碰巧的是,竖线在正则表达式中具有特殊的含义,因此需要用\字符来表示转义,而这个\又需要用另一个\来转义,这样就产生了“\\|”表达式。
完整的程序如程序清单2-1所示。静态方法
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/053-i.jpg?sign=1739361023-eWU9zaXxrSpVoENc0JkQokuKztA9LVYM-0-911d88b121ef5077c7428a938dd1a846)
首先写出该数组的长度,然后写出每条记录。静态方法
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/053-2-i.jpg?sign=1739361023-YOLAvV2FlmrY4FQDJsJh5pRW7xJ1LatK-0-9ccae88ad753a401a4c440ab035a05f3)
首先读入该数组的长度,然后读入每条记录。这显得稍微有点棘手:
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/053-3-i.jpg?sign=1739361023-rcJfAb3emcW8PjgeMs7asZR3AOT1mOG2-0-476c57ff1cc545ef101693ff846283a0)
对nextInt的调用读入的是数组长度,但不包括行尾的换行字符,我们必须处理掉这个换行符,这样,在调用nextLine方法后,readData方法就可以获得下一行输入了。
程序清单2-1 textFile/TextFileTest.java
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/053-4-i.jpg?sign=1739361023-6rKs3S6NvYv6wfZrdKtQaDpLYz5CaFzR-0-fc5f0bf0fbcd731e5430d46fc156fc6f)
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/054-i.jpg?sign=1739361023-KJOzDB4qEX43QyppDuSurl5oaUsUbJHz-0-1ab254246614f9d9c5f6391cecc60cc4)
![](https://epubservercos.yuewen.com/F21227/18365861501241106/epubprivate/OEBPS/Images/055-i.jpg?sign=1739361023-yjmvYEMI6QdJAwDuQJoYA03ERmTMKiyJ-0-7424e9c7eb7e346a8da9883eb5cc1706)