当前位置: 首页 > news >正文

使用cardme读写VCard文件,实现批量导入导出电话簿

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

首先下载jar包cardme。

http://sourceforge.net/projects/cardme/?source=navbar

cardme是基于java语言的操作vCard(后缀vcf)文件的开源项目。

在项目中有一个类net.sourceforge.cardme.engine.TestParser。是官方给的example。

先来梳理几个基本概念

VCardEngine:主要用于从字符、文件中格式化或读取VCard数据,并转换为VCard对象

VCardWriter:主要用户把VCard对象装换为字符,方便写入文件。很难理解的是没有VCardReader对象。而VCardEngine对象却做着VCardReader对象的事儿。

VCard:可以理解为名片。定义了名片的基本协议(接口)。

VCardImpl:名片的实现类。

VCardType:名片的数据。名片的数据都是有类型的比如电话TelType,名字NameType,地址AdrType


基本概念理解了。我们来看看如何使用这些API

第一个需求读取

会使用到VCardEngine类主要有如下API

parse:是一个方法,方法含义为:从一个文件(或字符)中读取(格式化)VCard对象。如果参数是一个数组,那么多久返回一个VCard对象数组

parseMultiple:也是一个重载方法。含义为从一个文件(或字符)中读取(格式化)多个VCard对象。

读取接口很简单。只要理解了上面的几个基本概念,就完全没有问题了。

第二个需求写入

TestParser中只是把VCard对象转换为了字符。并没有写入文件,也没有就VCardType做任何example。

VCardWriter writer = new VCardWriter(VCardVersion.V3_0, CompatibilityMode.RFC2426);//用户把VCard转换为字符

FileWriter fw = new FileWriter(new File("F:/tel/0.vcf"));//把VCard数据(字符)写入文件

VCardImpl vc = new VCardImpl();//创建一个名片

//设置名片名字(FNType)。Sets the FN type. This type must be set in the VCard and cannot be omitted, it can however be left with all empty values.文档说这个值必须设置,不能忽略。

vc.setFN(new FNType("张三");

//给名片添加一个电话号码。名片是可以有多个号码的

vc.addTel(new TelType("13888888888"));

writer.setVCard(vc);

String str = writer.buildVCardString();//把名片对象转化为字符

fw.append(str);//写入文件

fw.flush();

fw.close();

对于VCard重点在于理解其VCardType的含义。我的理解为名片上的数据,不同的数据对应不同的VCardType实现。



转载于:https://my.oschina.net/u/1244507/blog/464255

相关文章:

  • 使用SQL Server 2008远程链接时SQL数据库不成功的解决方法
  • 做基准测试时tpcc相关注意点
  • 分享一个 ftp下载、解压、更新依赖库文件的 python 脚本
  • wifi的web 认证。
  • Servlet开篇
  • Linode Centos6.5从零开始装环境...流水账
  • 在Linux系统中如何识别U盘
  • sql语句中in与exist not in与not exist 的区别
  • android 关于 android sdk manager 更新,下载慢的问题
  • (笔试题)合法字符串
  • 【重磅】大众点评运维架构图文详解 @马哥教育联合创始人张冠宇
  • linux总结
  • 6月又过去一大半了。
  • 通过Exchange Server 中的OWA页面找回被删除的邮件
  • 基于socket.io的实时消息推送
  • AWS实战 - 利用IAM对S3做访问控制
  • C++入门教程(10):for 语句
  • canvas 高仿 Apple Watch 表盘
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • ERLANG 网工修炼笔记 ---- UDP
  • JS数组方法汇总
  • python_bomb----数据类型总结
  • SOFAMosn配置模型
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 二维平面内的碰撞检测【一】
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 回流、重绘及其优化
  • 基于组件的设计工作流与界面抽象
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 以太坊客户端Geth命令参数详解
  • 译有关态射的一切
  • 鱼骨图 - 如何绘制?
  • 怎样选择前端框架
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #{} 和 ${}区别
  • #162 (Div. 2)
  • #if和#ifdef区别
  • #Linux(帮助手册)
  • #QT(TCP网络编程-服务端)
  • (4)事件处理——(7)简单事件(Simple events)
  • (9)目标检测_SSD的原理
  • (C#)获取字符编码的类
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (javascript)再说document.body.scrollTop的使用问题
  • (python)数据结构---字典
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (转)程序员技术练级攻略
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • ./和../以及/和~之间的区别
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET中 MVC 工厂模式浅析