00:00
我们已经把我们当前的生产者的一个架子搭起来了,那最起码呢,对象的构建,包括生产数据的方法,以及关闭的方法呢,咱们都已经给他准备好了,那接下来呢,我们准备呢,继续实现它的逻辑了,那么它的逻辑当中啊,首先我们讲过,你既然是一个叫local producer,那你的数据从哪来,你生成到哪去,这个我们是需要知道的,所以我们的producer当中,它是有两个方法的,一个叫set in,一个叫set out,你的数据的来源,你的数据的目标都在哪里,所以啊,我们这里呢,再给他准备一下,所以我们点击new创建我们一个包,这个包我们叫IO。啊,所谓的IO呢,就是一个输入一个输出啊,就这个意思了,然后呢,再点击它,我们点击个new创建我们叫做local啊,我们的file叫data in,就意味着我的数据来源是我们的本地文件啊,要从本地文件当中把数据给它读过来,然后呢,我们点击OK,那这个时候呢,既然你是一个data in,那我应该实现对应的接口叫data in啊应该是这个样子啊好了,写完之后啊,来,咱们写上咱们叫数据我们的输入,那是我们写上前面叫本地文件啊,本地咱们叫本地文件数据输入啊,那你有输入就应该有输出啊,所以在这里呢,再来一个new,创建一个类,咱们写上叫local file,咱们叫data,因为我们最终形成的数据也是个文件,那也是一个输出啊,所以点击OK,然后在这里呢,也给它加上叫做接口叫嗯。
01:38
好了,然后呢,我这里呢,我们的date out,然后在这里给它加上啊好,那么写上咱们叫本地啊,本地文件的数据输出,嗯,好行,写完之后,那这就好办了,因为我们当前的producer就有两个专门的方法来做这个事儿,所以第二我们的site,我们有一个in啊,我们new local啊,我们的file data in,然后呢,再来一个咱们叫set out。
02:07
啊,把它组合在一块儿,面向对象的开发思路就是组合各个对象,那么这里呢,我们再来,咱们叫做date out,嗯,好了,那行,那我现在呢,这个呢,我们写完之后啊,这块呢,咱们就有了,那么你的这个in和这个out呢,我就需要稍微考虑一下了,因为你首先你这是跟我们的文件有关系,那文件有关系的话,你得把文件找到路径在哪啊,所以咱们这个data in呢,咱们首先得加点东西,咱们写上叫public,咱们叫VO,叫。啊,叫做你告诉我路径,这个路径可能是网络路径,可能是本地文件路径,这个不确定,但是你得告诉我个路径,还有可能是我们哈多当中的路径,这都有可能,所以样我就先把这个加上,同样道理,你个date in的有,那我这个out呢,它也得有,你输出到哪去,你输出到网络当中,还是本地文件呢,还是我们啊哈杜当中,这都有可能啊,所以把这个呢给它加上,你加上了以后,那我回过头来,我们这边呢,就应该给他来了啊,我们写上。
03:10
把这个方法呢,给它重写一下啊,好,然后呢,我把这个地方呢,也给它重写一下啊,来有这么一个方法,嗯嗯,Set pass,好,那我写完之后,接下来,那我在刚才的创建过程当中啊,我就什么,我就希望你在构建这个对象的同时,把他的那个路径你告诉他,你不是本地嘛,那你本地又就应该有个路径啊,所以我就希望我构建这个对象的时候,把路径我直接告诉你,那那这个印它表示什么意思呢?表示的是你不是要去生产数据吗?那你以什么为依托来生产数据呢?你不能想当然的生产数据,比方说电话号码,电话号码你随便生成吗?那肯定不是,所以在这种情况下,同学们回过头来看,在我们这里呢,有辅助文档,辅助文档当中的第一个啊,别第一个这个这个什么东西啊,叫联系人,联系人的那个数据,所以把这个打开,打开以后你看里面是什么呀,里面。
04:11
是我们事先准备的什么,哎,一部分的联系人的电话号码总共有25个,那么也就意味着我们的通话记录那个话的人主教和被调用户应该来自于我们这个通话清单,最起码呢,我的这个什么通讯录应该是有的,所以我们这里呢,就完全可以这么来做,来,我写上我写上什么呢,我就把咱们这个通话记录的他,诶我给他拿过来,咱们加一个啊,咱们的这个东西咱们拷贝这是我们的一个通讯录啊,所以呢,我就把咱们那个通讯录呢,给它放到这里来就可以了啊,放过来。放过来以后看这怎么回事啊,报错了吗?嗯,哦,咱们这没有是吧,没关系啊,这是一个构造方法,它并没有啊,不存在这个咱们一会儿再说,那既然我的印我知道了,我要从这个里面把那个啊通讯录的数据取出来,那你输出应该输出一个我们的通话日志,那么这个通话日志呢,应该类似于这个样子啊,一个call.log那么我们打开,打开以后大家看应该就类似于这个样子,哪一个用户给另外一个用户在什么时间点打了多长时间的电话,应该是这么个样子啊,所以那我这里应该也有一个什么诶路径,所以我写上咱们叫call lock拷贝,拷贝以后这个呢,就是我输出的那个路径,一个是我输入的,一个是我输出的,如果你老师呀,我用不着那个输入,那这个你就别加了,你光要输出就行了啊,所以啊,在我们当前的情况下,我们是local file嘛,本地那都应该有这样的路径在里面,可是这里报错了,是因为他没有。
05:48
提供对应的构造方法,没关系,我直接来写上叫public,然后把这个呢,我们拷贝,拷贝以后我放过来,那么这里呢,给它拉一个,嗯,咱们叫string pass,你把路径你告诉我,你把路径你告诉我,那这个地方我就可以直接来了啊,就是调我这个方法跟这个方法完全一样,不就完事了吗?诶,我就这么写啊,同样道理,你再把这个拷贝拷贝到那个al里面去啊,也是一样。
06:15
啊也是一样,然后呢,这个地方应该是我们的O,诶好了,那我现在呢,把这个呢,我们基本上给它搭建好了,搭建好之后,那接下来我们这边就不报错了,那你不报错的情况下,那我就准备要读取数据了,最起码你的数据要给他拿到了,那就是这样,这个呢咱们一会儿再说,那我现在先看看生产数据点,点完以后呢,这个是我的produce,我们有一个实现类来实现这个功能,所以打开在这里,那么它里面就应该有一个什么呢produce了,然后呢,我们这个地方大家可以看到我们去什么了,我们是不是set set out了,那这两个in和out,我们是不是应该给它保存起来,我们好用它呀,那所以在这里怎么办?我们写上一个叫叫data in,诶,我们写个叫data in,咱们就叫in就行啊。
07:07
然后呢,在我们这个位置给它补充上叫this.in啊等于我们的in,然后呢,这里呢,我们写上叫this.out它等于我们的out啊来在上面呢,再准备一下咱们的pro,咱们叫date out,然后呢,给out啊一个输入一个输出,那我这边有了之后,那我接下来咱们要做的事情呢,就是produce,我这写上叫生产我数据啊,咱们要生产啊,生产我们的数据,OK,那你要生产数据的情况下,首先我们先给他协商啊来。干嘛呢?我们写上第一个,咱们要读取,读取我们的通讯录的数据。你得把那个通讯录的数据给它读到,形成一个集合,然后从这个通讯录里面去随机生成两个通话的那个电话号码,所以呢,我们写上啊来第二个从我们的通讯录,从我们通讯录中获取啊,这个也不叫获取了,或者也也可以啊,咱们叫随机啊,随机查找两个电话号码啊,电话号码啊,为什么要两个电话号码呢?一个就是那个主教,一个呢就是那个被教,哎谁给谁打的,我就有两个电话号码啊,写错了两个电话啊。
08:29
电话号码就这个东西啊,那你如果能够找到的情况下,接下来再来干嘛呢?咱们就生成我们的通话啊,咱们就生成我们随机啊,随机的通话时间,OK,然后再来我们再写上叫生啊来我们叫生成随机的通话时长。哎,一个时间一个时长,那时间有了,时长有了,电话号码有了,OK,我们接下来叫生成通话记录,生成我们的通话记录,那你生成通话记录以后,那我就把这个记录给它生成到文件里面就行了,所以将我们的通话记录啊给他刷写到我们的数据文件中。
09:19
诶,就这个意思啊,所以我们整个的生产数据的流程应该大概是这个样子啊,好了,那既然是这个样子的话,咱们一点一点来做吧,并且还有一件事情,咱们说了,咱们这个生成是一次性的吗?就生成一遍吗?不是吧,你要不断的生成,不断的生成来模拟一个真实的环境,对吗?所以它前面在我们的课件当中有一个叫做每秒钟两条,对吗?每秒钟两条你在不断的去什么生成,不断生成,所以在这种情况下呀,通讯录这个就读一次就完了,那么你下面这个事儿,它应该是多次吧,所以在这里我们加一个什么东西啊,叫v true啊,写上一个叫well true,或者咱们也别叫well true,万一你什么时候想终止呢,对不对?所以呢,我们给它一个flag啊,所以来我们写上一个flag或叫public也行啊,都行,然后呢,我们写上一个叫flag,这个flag呢,我加一个东西啊,我加个东西咱们叫做什么呢?叫VO tell。
10:19
有印象吗?是不是增强内存可见性啊啊,当我在别的线程当中改变了我们的这个什么它的属性的话,我们这也能看得到吧,诶就可以,或者你就最简单的,你加个同步关键字也可以啊,都是一样的,所以把这个flag呢,给它放过来,默认情况下呢,它就是那个处的啊,除非你在那个运行的过程当中,你把它的值呢,给它改了,它变成false了,那就跳出了我的循环,这是可以做到的啊,然后呢,我这里呢,就给它来拷贝,拷贝到里面去啊,这就完事了,嗯,好,那行,那这块呢,我们就准备好了,准备好了以后这个我们一会儿再写逻辑啊,接下来我们把这个close给它关掉,那我们的close大家想想关谁呀?
11:05
是不是应该关这些东西啊,对不对,最起码你的in和out我应该关掉吧,对不对,那个印可能用一次就完事了,但那个out在不断的去什么输出吧,那肯定是在我用完之后给它关掉嘛,所以呢,我们这里可以这样啊,咱们写加上一个if啊,咱们写上一个叫做什么呢?叫做in啊,这个in咱们写上,如果你不等于那给什么in.close但是它没close那不行啊,你得有一个关闭的一个操作,所以我们这里呢,我想想啊,再来一个咱们写上叫。那个叫嗯,Close吧,诶这个东西啊,把你这个拿过来,把它写的更加完善一些会好一些啊拷贝拷贝以后这个out也是一样的,嗯。好了,行,写完之后,那我现在在当前场合下,我们去操作一下点点完之后,那我就可以close了,所以点我们的close方法啊,好,同样道理,我们写个if啊,来我们这边写上咱们叫out,如果它不等于now的情况下,然后呢,给它out,嗯,Out点我们的close,诶就这个意思,所以只要我释放完资源之后,那么我这个程序走完了,那么就可以继续往下走,那么就是关闭了啊,所以我们写上叫关闭,嗯,关闭生产者啊,咱们生产者把那个生产者的流水线呢,给它关掉,就不再生产数据了,嗯。
12:29
好了,那我现在把这个呢,咱们写完了之后呢,我接下来咱们要给它补充完整了,首先第一个要读取通讯录的数据,那你读取通讯录的数据,这个通讯录不就是靠印来读取的吗?所以我的印里面它应该有相应的读取的方法,对吗?所以说你会发现这个印里面现在啥都没有,那肯定不对,因为他应该提供什么对应的读取的方法,所以我的这个data in呢,我应该来写上一个什么东西呢?叫public,然后呢,我写上个object什么东西啊,叫,然后我叫IO exception,因为一般情况下,我们的读取和那个输出啊,都会有一个IO exception出来啊,所以我们事先给它来抛出去啊,那所以在当前场合下,那我的这个印应该怎么办?
13:18
应该怎么办?是不是应该给这个read的方法啊,你read的方法以后,大家想想他应该返回什么东西object吧,那你返回这个object呀,不太好,为什么呢?因为我当前的业务当中是不是要读取通讯录的数据啊,那你是不是应该有通讯录的对象来保存到一个集合当中,然后我随机从里面取啊,所以我这里呢,还得把那个通讯录准备一下,所以啊,在这个B里面我再加一个,我再加一个类,这个类我们就叫通讯录。啊其就联系人呢啊,点击OK啊,咱们叫联系人,咱们叫联系人啊就这样,那你的联系人那就顾名思义了,那你的人名叫什么,你的电话号码是什么,不就这么回事吗?所以我们写上咱们叫pro叫做string啊,我们叫做tell啊然后呢,再来我们写上叫到我们的,嗯,那诶你叫什么名字,你的那个电话号码是什么,你要告诉我,那好了,那我这边呢,既然他是一个联系人,那我这里应该还应该在是继承一个,继承个什么呢?那个date。
14:22
啊,继承我的那个date。因为你是我的数据啊,那你只要是我的数据的话,应该有这样的东西啊,这个呢不要嗯。好了,呃,我看看啊,这个接口实现它,我想一想啊,我想一想。我想想这个他。算了,别等什么它了啊,加点东西,嗯,一个叫set value吧,一个叫做get吧,啊就跟我们普通的一个B一样啊,那么set呢,给个VO,嗯,我们的get给个他啊,因为我也不知道什么类型的啊,Set呢,这边给一个咱们就object啊,然后呢,给他一个value,诶这么写,嗯,好了,就是跟一个普通的一个对象一样啊,感觉一样,那行,那这个我改完之后,肯定刚才有些东西就出错了啊,这边呢就会出错,所以把这个呢,我们去掉啊,去掉以后呢,在这里呢,给它来啊实现这两个东西,那么set呢,应该就是它了,嗯,好,它等于我们的这个啊好,然后呢,我这边把它改成我们的这个啊,Spring类型的,嗯嗯,还不能是string类型的啊,就是object啊,那这个呢,我要稍微的给它变一变啊来好了,那么get的话,那我这个改成我们的四循法,那么把这个呢,它给它返回一下啊好了,就是最基本的一个数据立项。
15:42
的一个接口啊,那这么写完以后啊,这个我们的数据对象啊,你就最好不要说直接能够构建对象了,所以我再加一个。叫tract啊抽象了啊,那你抽象的话,那咱们这就没有任何的问题了啊好,那我现在干嘛呢,我现在给他来增加我们的set get的方法啊,那我这里直接来吧,我们这边直接来啊。
16:07
嗯,我想想咱们这里呢,给他来让看看啊,咱们这里直接来咱们的我看看啊,他这个。我记得是啊。他怎么没有提示呀。他这没有提示啊。我的提示去哪去了?嗯,看看啊,咱们这里呢,就生成吧,它没有提示我就直接点了啊,那么点的话,这边就会有set和那个get,那我这里把这两个选中就行了啊,来选中它,然后点击OK啊好了,那现在呢,我们的联系人有了,所以我这里呢,就希望得到个什么东西啊,我得到一个它咱们写上咱们叫做这个,我就希望我得到一个通讯录当中联系人的数据集合,我希望得到一个这样的东西,但是你这么写呢,跟我们这边呢,它又不太一样了,那怎么办?
17:08
也就是说我读取的时候啊,你这个地我希望得到它,但是呢,你这边呢,为了通用性呢,你却这么写的,那我能不能想什么办法改善一下,让他又通用又能满足我的要求。就你这么写是通用的,但是我当前可能不希望返回,那么object我希望返回他。那这个同学们想想,我又想能够满足我当前的要求,直接拿到那个通讯录的那个对象,又希望呢,能够什么通用一些,那我该怎么办?这个时候就该用到什么泛型,那就该用到泛型了,那也就意味着你的这个类型啊,不要固定不变,你就要给我什么传进来,所以我这个read的方法我保持不变,我再加一个啊,也就意味着我再加一个方法,这个方法就跟刚才就不一样了,那所以呢,我要写上一个什么东西呢,叫class。
18:01
啊,你给我传个类型过来,你传的是什么类型,我就返回给你什么类型,那这个时候呢,我可以给他一个叫list啊,我可以给他一个list,我给他list的话,那这个我该怎么写。啊,我可以写个T,可不可以写T呀,我这也写个T。什么意思?同学们,就意味着你给我传进来什么类型,我就返回一个什么样类型的集合吧,这个能明白什么意思,我就假设现在要没标红的话,那么是不是意味着你传给我一个U的,我返回的就是个U集合,你给我一个EP,我返回跟EP的集合吧,我的目的就在这儿了啊,可是这个T这里面这个类型能随便传吗?你说我传一个string。不行吧,因为死之它是无法封装我的对象的,对不对,那所以呢,我最好呢是什么呢?可以封装成对象的那样的数据,所以我再加一个约束,这个约束呢,我这么写,我再加一个约束,这个约束呢,我就这样咱们叫做date。
19:07
嗯,咱们叫date。好了啊,咱们把这个date给它写进去,写完以后这个你们能明白什么意思吗?啊,就是我现在把这个方法呢,定义成这个样子,你们能明白什么意思吗?首先我刚才其实是可以不加他的,对吗?你不加他的话,我都说了,你给我个UR,我就返回一个U的集合,为什么?因为我读取数据我要变成UR啊,所以形成了一个集合的概念,这是可以的,可是呢,我说了,你万一你给我的不是个UR,给我个string,给我个int,那我怎么封装成对象,我也封装不了啊,所以在这种情况下呢,我希望什么呢?最好是能封装成对象的那些类型,你给我传进来,比方说这个是什么意思,它表述的是我们贝塔的子类就可以传进来,对吗?对不就是你这个是承他了,就你一定要是他的类,你是他的的话,进来是对的,你要不是他那你不行。
20:10
UU跟他没关系,那你传不进来,你给我个EP department都传不进来,只有继承了他才能传进来,所以大家看我的程序呢,我就可以这么来写了,我先把那个印呢给它补充完整。把那个我们的那个印啊,那个印呢,在这儿啊,在这里面呢,要给它补充完整了,所以呢,我们来我们写上它,诶好,那么在这里面呢,这个瑞的方法我不用了,为什么呢?咱们暂时不用,咱们用的是这个方法,那用的是这个方法的话,来咱们写上啊,来写上咱们叫做什么呢?读取数据啊,我们说封装啊,要返回数据集合,你把那个数据拿到以后呢,给它转换成集合,再给它返回去啊,就是这么一个概念啊好了,那行这块呢,我们加上之后,那我回过头来到咱们刚才的这个地方啊,来好,这个地方也报错了,报错的话接口了给它实现,嗯,那个可乐的方法,这个咱们一会儿就给它补充完整啊,那接下来呢,我下面的这个位置,我应该怎么写就对了,首先你是不是就应该这么写啊点。
21:16
我们的点class吧,是不是这意思啊,然后呢,这边呢,会有什么异常发生,那我这边为了什么准确起见,我给它加上一个TRY,然后呢,写上一个catch,嗯,好把这个呢我们来,嗯。咱们的exception啊,好E,然后呢,我们打印堆在信息,OK,把我这个程序呢,原封不动给它挪进去,诶挪进去,挪进去以后,现在呢,我们这一块就对了,那对了以后,但只是把这个架子搭起来了,就意味着我这么做可以,但是我的具体实现是什么样子的,我得来看一看,所以点点完以后到我的这个data in,那么大家想想在我这里面该如何实现呢?首先我说了是要读取数据转换成我的数据集合,那就意味着我这里面的逻辑应该怎么办?是不是应该从我们的文件中啊,从那个叫通讯录啊,从通讯录啊,再从文件来啊,从数据文件中读取所有的数据,所有的啊,读取所有的数据啊,然后干嘛呢,将我们的数据转换为指定类型的对象。
22:30
封装为集合啊,封装为集合返回,诶,这是我们的目的,先把数据先读出来,然后每一条数据呢,封装成一个对象,再给它返回,这是我的目的啊好了,那这是我的目的的情况下,那首先第一个吧,这句话什么意思?将数据文件中,就从数据文件中读取所有的数据,你首先你是不是得把那个pass对应的那个流先取到啊,你要读取数据,读取文件没有流吗?得有个流对吗?所以我们这里同学们看,我在这里加上一个,加什么东西呢?我加个流进来,咱们叫buffer。
23:14
这的刚才给大家看到那个数据文件了,那个数据文件这个里面是不是一行一行的数据,那所以buffer的reader里面恰恰有一个方法是可以读取一行的,那所以啊,我们就准备用它了,那所以在当前的场合下,那我的程序呢,就应该这么写了,我的reader要想办法给它构建出来,所以我们这个set pass呀,它就应该等于new,我们叫buffer的reader,可是你这个buffer的reader它是读取,是按行读取的,但是你真正读文件应该还有另外的流,对吗?所以我这边还得加一个叫做什么呢?New,咱们叫fair input input咱们的,然后呢,把那个pass给他传进来,对吗?可是有问题呀,什么问题,我们这个是,而这个却是。
24:14
一个是字节流,一个是字符流,他们是没有办法直接给他什么呢构建的,所以这时候你需要一个什么东西啊,你是不是需要一个叫转换流啊,这个你们还有印象吗?字节和字符之间是不能够直接转换的,需要有个转换流存在对吗?所以我们这里new,咱们叫做什么呢?咱们叫做。什么东西啊,是不是input stream reader啊,有个转换将转换成reader,你这时候再来传什么,你用我们刚才的那个就行了啊,你再来传它啊,你这个传完它以后就行了,那咱们这个转换流当中啊,可能还涉及到一个字符编码的问题啊,所以我这里还得再加一个啊来。
25:00
所以我写上咱们叫UTF杠八,嗯,好了啊行,这里呢,会有异常发生,咱们把异常的给它捕捉一下,点一下啊,咱们直接来吧,呃,在这个里面我们直接来,咱们给它包一下咱们那个六啊,Check cat就可以了啊这个异常那行了,我的reader就准备好了,你准备好了以后,那我这个读取那不就简单了吗?那不就写上叫spring,我们叫一行吗?这个一行就等于well well什么呀。是不是我们写上叫做reader,哎,不对啊,应该是我们的,然后它等于reader,点我们的read对不对,然后呢,加上一个括号,诶括号括号呢,它不等于空,不等于空什么意思,说明我读到数据了吧,诶这一行就是我读到的数据我就拿到了啊所以啊,就是这样的,那既然你得到它了,那我该怎么办?
26:02
你把数据得到了,但是这不是我想要的数据吧,我想要的数据是不是应该是什么样子的,应该是要封装成我的对象的呀,那我该怎么做,那这个时候我该怎么做呀?那我首先大家看啊,我这里咱们先准备一个叫list,咱们写上一个T,然后写个叫TS,等于new r list,然后呢,加上一个它,然后写上一个T,然后呢,写完之后,诶,然后呢,在我们下面这个TS这个位置把它加进去,加进去以后你最终返回的是它,那你是不是应该在我们每一条数据应该准备一个对象啊,所以把这个拿过来,拿过来以后同学们看啊,那我这里呢,来我就放到这里,那我首先应该怎么办?我是不是应该先把这个T给它构建出来啊,这能明白吗?你要往集合里面放数据,那么每一条数据是不是就形成个对象啊,所以它应该是。
27:02
是不是等于我们这个东西叫做点new instance呀,这个能不能明白,应该可以吧,对不对啊,应该是可以的啊,所以我们这里呢,哦,徒弟就异常发生啊,不是这个转换的问题啊,我想想啊,那咱们这个地方给它抛这个东西也行吧,这倒无所谓啊,来我这里呢,给它加一个try catch,嗯,好,然后呢,把这个呢,我们拿过来,咱们叫EXCEPTION11点啊一点我们这个,然后呢,把这个呢,我们给它放进去啊来抛出去好了,然后呢,我抛出去以后,现在我们构建的对象那就简单了,干嘛呀,你的T s.T不就完事了吗?对吧,你这样的话是不是我的对象就有了,诶对象有了,可是你这个对象跟这个数据之间没关系啊,那不行,诶我说不行是不行啊,但是没关系,为什么呢?因为咱们什么样的数据才能进来。什么样的类型才能进来,是不是你继承了date呀?而这个date它恰恰它有一个方法,这个方法干嘛呢?是不是叫set value啊?这个set value是不是就意味着我可以把当前这一行传给他,你传给他的话,这个对象里面是不是就有了我的数据,那有了我的数据怎么解析就不是我的事儿了,那是你的事儿,怎么解析成你想要的数据,那就是你的事儿了。所以那么大家想一想,这个是我们的联系人,他有没有那个方法叫set value,有吧,他既然有这个方法,我就可以重写这个方法,我能不能重写?我能吧,那如果我能重写的话,同学看,那我就重写这个方法,我重写之后我干什么呢?很简单。
28:47
我这个是不是我文件当中的一行数据给我传进来了,那传进来的话我能不能这么写呢?叫点,我们叫做split,然后写上一个叫斜杠T呀,我们这个数据本身是不是两条数据中间加了一个tab呀,记住啊,不是空格,是个tab啊,所以我这里呢是斜杠T,那么斜杠T以后就会得到两个值,我们写上叫value加个S,诶我就能够得到这么个东西,那你这两个值你都能得到,那么难道你的电话号码和名称我就不知道了吗?
29:23
大家想想,我分解之后的第一个是不是电话号码,第二个是不是名称,那所以我重写方法之后,那就简单了,咱们叫site,我们的name,再来一个叫set,我们的tell,那这个tell呢,其实values我们写上一个零啊,第一个分解的是我们的电话号码,第二个分解的是我们的什么呢?诶名称,那你想想吧,你这么做完以后,那么如果没有任何问题的情况下,我们这儿能不能得到我想要的数据。是不是应该可以啊,哎,应该可以了,那既然可以的话呢,咱们回过头来就把它补充完整吧,这个close还没有做呢,所以我们写上它啊来我们写上啊,咱们叫关闭资源,那关闭资源不就是你上面那个reader我要关闭吗?那所以把这个reader我们拷贝过来啊,拷贝过来以后在我这里呢,给它来我们写上啊来我们写上,如果它不等于啊,它不等于钠,你不等于钠,你给我关了啊,点我们的close,诶把它关掉啊好了,那我现在呢,把这个就算是写完了,对不对,我还不知道呢,我一会儿呢去验证一下啊行,那我现在呢,这一块呢就基本差不多了,那现在呢,只要保证我的数据能够得到,那就OK了啊,所以我现在呢就准备来试一试,这个数呢,我先不要,我先不要啊,把它做掉,我住掉以后,然后呢,我在这里干嘛呢,我们诶给它来操作一下,咱们也别直接直接来。
30:57
吧,把这个我们的它拿过来,诶我现在我觉得不好,咱们还是给它来负循环得了啊,所以呢,点我们的for循环后,循环以后,那我当前的每一个联系人我就得到了,得到了以后我们直接来啊来我们直接来,然后呢,把它咱们给它放过来啊,那放过来以后,那我为了打印的结果,我看着比较什么呢?诶比较舒服,所以我还可以做一件事情干嘛呢?我们这里是不是可以重写它的方法呀,对不对,咱们叫public叫叫to string吧,对不对啊好啊,这个地方我们应该写上一个string啊,然后呢,我这里呢,就准备呢给它来,嗯,咱们写上吧,Return啊,咱们写上咱们就叫做我们的它吧,嗯,然后呢,加上一个这个加上它以后,中间中间加个什么呢?就是我的tell啊,然后再来逗逗号啊,咱们的电话号码后面再。
31:57
来一个,后面再来一个,那就加上我的name诶就可以了,这就是我每一个联系人的什么字符串,把它打印出来啊好了,那我现在呢,把这个程序我写完了,记住我现在没有输出,只有输入,输入没问题,那输出这就好办了,所以我现在直接运行啊,直接运行一下,我现在点一下,因为它要读取文件嘛,来运行。
32:22
运行之后呢,看一看我们当前的这个结果是什么样子啊哦,咱们这边还没有去给它完成啊,所以我这里呢,把这个呢我们去掉啊,那我去掉以后我这里还有点问题,因为我加两个方法啊,所以我这边还得回去,嗯,把这个呢,我们的常量点一下,嗯,点完以后在这里给它来啊重写点击OK啊点击OK以后这个咱不要诶好了啊,然后呢,Set,其实set value啊,加不加的也可以吧,这都无所谓啊来我们写上叫这点name,它等于value诶。啊,这个使string类型的这个也可以吧,无所谓啊,来强制转移啊,嗯,好了,那我现在呢,我再重新来啊,刚才这块没有补充完整,那我现在回过头来还回到这边来,我点一下运行,运行以后看结果。
33:17
好了,同学们看一下行不行,是不是把我们当前文件中的25条数据都给它转换成了一个一个的对象,并且把属性都给它准备好了,哎,就是这样啊,所以这个呢,我们先停一。
我来说两句