上一篇文章中我们实现了从系统的联系人数据库中获取联系人信息。文章链接:http://blog.csdn.net/github_36878269/article/details/73826289
  但是技术总监又提出了新的需求,用户想从文件中导入联系人信息,比如从华为手机助手中导出的联系人文件。在网上查找了许多的答案,有使用第三方的jar包的,比如什么我也忘了,很是坑爹。所以索性就自己分析导出的文件,从流中读取数据。

在实体机上使用系统联系人应用新建几个联系人,连接电脑,使用华为手机助手导出联系人。
  1.导出为CSV格式。
导出的文件内容为:

 耐心的去分析其中数据表达的信息,该文件在windows上提示为”逗号分隔值文件”,是由引号,引号中的内容和逗号组成的。第一行为联系人信息字段,从第二行开始,每一行代表一个联系人信息,其中每一个”“中的内容为第一行字段对应的数据。比如第二行中的”张三”对应第一行中的”Given Name”,即用户姓名。

 根据这个文件格式我们可以从中获取我们想要的信息。下边是我的实现代码。

//fileExtend为选中文件的地址后缀。
if(fileExtend.equals("csv")){//处理CSV格式数据。EntityContact contact = null;try {while((buffer = reader.readLine()) != null){if(buffer.startsWith("\"")){contact = new EntityContact();//联系人信息行,从中选择我们想要的信息。String [] infos = buffer.split(",");contact.setName(nullChange(infos[1])); //联系人姓名。contact.setMobile_num(nullChange(infos[5])); //联系人手机号。contact.setHome_num(nullChange(infos[6]));//家用电话。contact.setOffice_num(nullChange(infos[7]));//工作电话。contact.setEmail(nullChange(infos[13]));//Email。contact.setHome_address(nullChange(infos[17]));//家庭住址。contact.setOffice_address(nullChange(infos[18]));//工作地址contact.setExtend(nullChange(infos[31]));//备注。contacts.add(contact);//放入集合。}}} catch (Exception e) {//数据格式有问题。contacts = null;}
}private static String nullChange(String data){return (data.equals("") ? null : data.replace("\"", ""));
}

 我们就可以从contacts这个链表中获取文件中的联系人信息了。csv格式中不存放联系人的头像信息,所以我们就无法从中获取联系人的头像信息。但vcf格式的可以。

  2.vcf格式。
还是分析从华为手机助手导出的联系人文件(.vcf)。


这种格式和csv格式不同,一条联系人数据占用很多行,以”BEGIN:VCARD”为开始,以”END:VCARD”为结束,其中的每行数据代表联系人中的一条信息。如TEL;CELL:13966665555为联系人 ”lisi” 的电话号码。根据这个尿性,我们可以写出如下代码:

//fileExtend为选中文件的地址后缀。
if(fileExtend.equals("vcf")){//处理VCF格式数据。EntityContact contact = null;while((buffer = reader.readLine()) != null){if(buffer.equals("BEGIN:VCARD")){//开始标识符。contact = new EntityContact();} else if(buffer.startsWith("N:;")){//名字。buffer = buffer.substring(buffer.indexOf(";") + 1, buffer.lastIndexOf(";;;"));contact.setName(buffer);} else if(buffer.startsWith("TEL;CELL")){//手机号。buffer = buffer.substring(buffer.indexOf(":") + 1);contact.setMobile_num(buffer);} else if(buffer.startsWith("TEL;WORK;VOICE:")){//工作号码。buffer = buffer.substring(buffer.indexOf(":") + 1);contact.setOffice_num(buffer);} else if(buffer.startsWith("TEL;HOME;VOICE:")){//家用号码。buffer = buffer.substring(buffer.indexOf(":") + 1);contact.setHome_num(buffer);} else if(buffer.startsWith("EMAIL;HOME:")){buffer = buffer.substring(buffer.indexOf(":") + 1);contact.setEmail(buffer);} else if(buffer.startsWith("ADR;HOME:")){buffer = buffer.substring(buffer.indexOf(":") + 1, buffer.lastIndexOf(";;;;;;"));contact.setHome_address(buffer);} else if(buffer.startsWith("ADR;WORK:")){buffer = buffer.substring(buffer.indexOf(":") + 1, buffer.lastIndexOf(";;;;;;"));contact.setOffice_address(buffer);} else if(buffer.startsWith("NOTE;WORK:")){buffer = buffer.substring(buffer.indexOf(":") + 1);contact.setExtend(buffer);} else if(buffer.startsWith("PHOTO;")){//头像数据。buffer = buffer.substring(buffer.indexOf(":") + 1);contact.setPhoto(buffer);}else if(buffer.equals("END:VCARD")){//结束标识符。contacts.add(contact);}}
}

 是不是很简单呢?
总结下解决流程:1.从网上查阅资料,无果,最后放弃。2.从导出的文件中,分析数据,得到数据代表的信息,将数据解析获取想要的信息。

 如果有不足的地方还请大家指出,谢谢。

下次我还会介绍这两种格式的文件的导出,以及如何获取系统目录(外部存储,USB存储)并获取文件选中的地址。

从CSV和VCF文件中获取联系人信息相关推荐

  1. rest_快速检查REST API是否有效的方法-从清单文件中获取详细信息

    rest 在某些情况下,您可能想快速验证部署在开发,测试或生产环境中的REST API是否完全可以访问. 一种常见的实现方法是构建通用资源,该资源可提供例如已部署API的版本. 您可以手动触发对此资源 ...

  2. ceph-rest-api_快速检查REST API是否有效的方法-从清单文件中获取详细信息

    ceph-rest-api 在某些情况下,您可能想快速验证部署在开发,测试或生产环境中的REST API是否完全可以访问. 一种常见的实现方法是构建通用资源,该资源可提供例如已部署API的版本. 您可 ...

  3. 快速检查REST API是否有效的方法-从清单文件中获取详细信息

    在某些情况下,您可能想快速验证部署,开发,测试或生产环境中的REST API是否完全可以访问. 一种常见的实现方法是构建通用资源,该资源可提供例如已部署API的版本. 您可以手动触发对此资源的请求,或 ...

  4. java如何取到配置文件中值,从配置文件中获取配置信息的几种方法

    1.利用ResourceBundle类从properties文件中获取配置信息 创建配置文件并写入配置信息 image.png 使用以下代码可以轻松获取配置信息 package com.course. ...

  5. Python之一个关于天气的csv文件中获取最高和最低气温的图表

    Python之一个关于天气的csv文件中获取最高和最低气温的图表 科普: csv: 简单的说:以逗号分隔的值(CSV)将数据写入文件中,这样的文件称为CSV文件 说明: 博主这里主要是学习一下csv文 ...

  6. 2021.06.08|提取、比较各样品vcf文件中snp突变频率

    目录 摘要 环境与方法 使用代码 分析结果 总结 摘要 接到一个wgs项目,要帮助客户统计vcf文件中snp突变频率,比较两个样品的突变位点.这个工作在上一个项目中是手动处理的,当时参考序列短,突变位 ...

  7. OC从plist文件中获取数据

    怎样从plist文件中读取数据,这个和反归档相似,但是也存在着区别,比如说不用解码,当然一般我们获取的数据往往是对一个对象的描述,而且数据的个数也不是一个,因此我们有必要来说一下怎样完整的从plist ...

  8. java获取当前项目相对路径,在JAVA文件中获取该项目的相对路径

    在JAVA文件中获取该项目的相对路径 1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如: C:\xyz\test.txt 代表了test.t ...

  9. android xml获取指定,android:如何从xml文件中获取信息?

    我得到一个程序,从一个链接的服务器获取天气.我已经做了一些将字符串结合到URL的字符串.我现在需要从XML文件中获取信息.android:如何从xml文件中获取信息? 这是我的代码:(我更换了,为了安 ...

  10. java opencv 读取视频_java使用OpenCV从视频文件中获取帧

    本文实例为大家分享了java使用OpenCV从视频文件中获取帧的具体代码,供大家参考,具体内容如下 实现功能:使用Java获取mp4.mov.avi等视频文件中的图像帧,每秒获取一帧图像,并保存 环境 ...

最新文章

  1. python cx_oracle 有超时的设置吗_python cx_Oracle的基础使用方法(连接和增删改查)
  2. HDU——2874 Connections between cities
  3. java 规范异常的处理_规范-异常处理
  4. 如何在CButton中显示位图!!
  5. python答案公众号_大学慕课用Python玩转数据答案查题公众号
  6. poj 2373(单调队列优化dp)
  7. vue 微信公众号支付接口_基于vue的h5项目之支付宝支付与微信支付
  8. 4. Linux 集群安装
  9. JS获取屏幕浏览器网页高度和宽度属性
  10. javascript 对象基础 继承机制实例【对象冒充】
  11. CODING 受邀参加《腾讯全球数字生态大会》
  12. 怎样从red hat linux图形登录改成从文本登录
  13. 从来不敷面膜的人_女人睡觉前,敷面膜洗还是不洗?很多人都做错了,难怪皮肤总不好...
  14. 黑五已火 电商跨境成燎原之势
  15. 总结一下安装linux系统经验-版本选择-安装ubuntu
  16. c++多边形扫描线填充算法_python 小乌龟turtle画随机正多边形
  17. linux df命令无反馈,Linux df 命令长时间没有返回
  18. Java中常用的设计模式【模板模式】
  19. 每天学点5G-5G UDR
  20. Eli Bendersky's website » Code sample – socket client based on Twisted with PyQt

热门文章

  1. 人工鱼群算法解决TSP问题
  2. web前端-HTML 媒体插件 022
  3. 计算机软件编程英语词汇集锦(转载)
  4. 西工大计算机学院软件工程专硕,念念不忘,必有回响——西北工业大学软件工程专硕...
  5. 西南科技大学OJ题 顺序栈基本操作的实现1044
  6. 【学习笔记】TRIZ 40个创新原理及解析
  7. 韦东山freeRTOS系列教程之【第三章】任务管理
  8. 常用连接linux工具
  9. qsnctf 2048 wp
  10. PHP生成excel表格文件并下载