Atitit Java制作VCARD   vcf

以上就是关于vCard的基本介绍,维基百科(英文)https://en.wikipedia.org/wiki/VCard写的比较全,可惜我看不懂。关于vCard格式介绍的文章网上也有很多,我就不再一一阐述。但是关于Java操作vCard的例子却不是很多了,有些也就是自己单单写的一个解析类,于是我漫游网络,最终找到了ez-vcard,我不知道还有没有别的库能操作vCard的,肯定有,但是我也懒得去找了,反正这个可以用就行了。╮( ̄▽ ̄)╭

ez-vcard:

github主页:https://github.com/mangstadt/ez-vcard

下载地址:https://github.com/mangstadt/ez-vcard/wiki/Downloads

API文档:http://mangstadt.github.io/ez-vcard/javadocs/latest/index.html

参考资料:https://github.com/mangstadt/ez-vcard/wiki

然后开始编写createVCard(Properties);

首先new一个VCard实体类

VCard vcard = new VCard();

以Email为例,添加属性

新建email,添加内容

Email email = new Email(properties.getProperty("vcard.email"));

添加Email的类别为INTERNET,关于类别,可以去查看vCard规范

email.getTypes().add(EmailType.INTERNET);

当添加多个邮箱后,可以设置优先级

email.setPref(1);

vcard.addEmail(email);

其他属性基本类似,具体可以查看官方API,值得一提的是PHOTO使用的是图片的base64,我们可以直接使用以下方式进行添加

package vcfvcardprj;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.nio.charset.Charset;

import java.nio.charset.CharsetDecoder;

import java.nio.charset.CharsetEncoder;

import java.util.List;

import com.csvreader.CsvReader;

import com.google.common.base.Joiner;

import com.google.common.collect.Lists;

import ezvcard.Ezvcard;

import ezvcard.VCard;

import ezvcard.VCardVersion;

import ezvcard.parameter.TelephoneType;

import ezvcard.property.Nickname;

public class vcfVcardDemo {

public static void main(String[] args) throws IOException {

String filePath="C:\\Users\\Administrator\\Desktop\\telbook.txt";

// 创建CSV读对象

//  new CsvReader

CsvReader csvReader = new CsvReader(  new FileInputStream(new File(filePath)) , Charset.forName("utf8"));

List li=Lists.newArrayList();

// 读表头

//  csvReader.readHeaders();

while (csvReader.readRecord()){

// 读一整行

System.out.println(csvReader.getRawRecord());

// 读这行的某一列

System.out.println(csvReader.get(0));

//      System.out.println(csvReader.get("Link"));

VCard vcard = new VCard();

vcard.setFormattedName(csvReader.get(1));

vcard.addTelephoneNumber(csvReader.get(0), TelephoneType.CELL);

//         vcard.addNickname( new Nickname().set csvReader.get(1));

String str = Ezvcard.write(vcard).version(VCardVersion.V3_0).go();

li.add(str);

}

String s=Joiner.on("\r\n").join(li);

System.out.println(s);

}

}

Photo photo = new Photo(new File("D://photo.jpg"), ImageType.JPEG);

关于自定义属性

VCardProperty QQ = new RawProperty("X-QQ", properties.getProperty("vcard.qq"));

vcard.addProperty(QQ);

所有属性添加完成后,编写main方法

public static void main(String[] args) { VCardUtil vCardUtil = new VCardUtil(); VCard vCard = vCardUtil.createVCard(vCardUtil.getProperties()); String s = Ezvcard.write(vCard).version(VCardVersion.V4_0).go(); System.out.println(s); }

添加getStringVCard() 测试

/**

* 获取字符串形式的vcard

* @param vCard vcard

* @return

*/ public String getStringVCard(VCard vCard){ CharArrayWriter charArrayWriter = new CharArrayWriter(); VCardWriter vCardWriter = null; try { //定义vcard输出流

vCardWriter = new VCardWriter(charArrayWriter,VCardVersion.V3_0); //设置每行的长度,null为不限制

vCardWriter.getRawWriter().getFoldedLineWriter().setLineLength(null); //讲vCard写到输出流里面

vCardWriter.write(vCard); } catch (IOException e) {

e.printStackTrace(); }finally { if (vCardWriter != null) try {

vCardWriter.close(); } catch (IOException e) {

e.printStackTrace(); } } return charArrayWriter.toString(); }

官方也给出了输出到File的例子,和一些设置信息

Example:

VCard vcard1 = ... VCard vcard2 = ... File file = new File("vcard.vcf"); VCardWriter writer = null; try {

writer = new VCardWriter(file, VCardVersion.V3_0);

writer.write(vcard1);

writer.write(vcard2); } finally { if (writer != null) writer.close(); } Changing the line folding settings:

VCardWriter writer = new VCardWriter(...);//disable line folding

writer.getRawWriter().getFoldedLineWriter().setLineLength(null);//change line length

writer.getRawWriter().getFoldedLineWriter().setLineLength(50);//change folded line indent string

writer.getRawWriter().getFoldedLineWriter().setIndent("/t");//change newline character

writer.getRawWriter().getFoldedLineWriter().setNewline("**");

后记:

目前可能部分手机不支持4.0格式的vCard,比如猴米就只支持3.0格式的

小米手机关于3.0版本头像支持问题

3.0版本的PHOTO格式为:

PHOTO;ENCODING=b;TYPE=jpeg:……

维基百科上写的也是ENCODING=b

Atitit Java制作VCARD vcf 以上就是关于vCard的基本介绍,维基百科(英文)https://en.wikipedia.org/wiki/VCard写的比较全,可惜我看不懂。相关推荐

  1. Java制作VCARD

    转载自   Java制作VCARD 简介: vCard是电子名片的文件格式标准.它一般附加在电子邮件之后,但也可以用于其它场合(如在互联网上相互交换).vCard可包含的信息有:姓名.地址资讯.电话号 ...

  2. VCard(.VCF) 2.1(rfc-2426)标准通信薄基本格式

    http://www.imc.org/pdi/vcard-21.txt vCard 规范容许公开交换个人数据交换 (Personal Data Interchange PDI) 信息,在传统纸质商业名 ...

  3. java 维基百科_wikipedia

    popup的使用(一)2021-01-22 16:35:58 核心代码 注意Hyperlink的使用 You can use a Popup to provide a link for a speci ...

  4. Atitit.java jna  调用c  c++ dll的原理与实践  总结  v2  q27

    Atitit.java jna  调用c  c++ dll的原理与实践  总结  v2  q27 1. Jna简单介绍1 2. Jna范例halo owrld1 3. Jna概念2 3.1. (1)需 ...

  5. Atitit JAVA p2p设计与总结  JXTA 2

    Atitit JAVA p2p设计与总结  JXTA 2 JXTA 2 是开放源代码 P2P 网络的第二个主要版本,它利用流行的.基于 Java 的参考实现作为构建基础.在设计方面进行了重要的修改,以 ...

  6. Atitit.Java exe bat  作为windows系统服务程序运行

    Atitit.Java exe bat  作为windows系统服务程序运行 1. 使用SC命令+srvany.exe (不错,推荐)+net start1 1.1. First 创建一个java的运 ...

  7. atitit. java jsoup html table的读取解析 总结

    atitit. java jsoup html table的读取解析 总结 1. 两个大的parser ,,,jsoup 跟个   htmlparser 1 2. 资料比较 1 3. jsoup越佳. ...

  8. Atitit Java OpenCV 捕获视频

    Atitit Java  OpenCV 捕获视频 ,打开一段视频或默认的摄像头 有两种方法,一种是在定义类的时候,一种是用open()方法. 一. 读取视频序列 OpenCV提供了一个简便易用的框架以 ...

  9. Atitit.java c#这类编程语言的设计失败点attilax总结

    Atitit.java c#这类编程语言的设计失败点attilax总结 1. Npe1 2. Api粒度过小而又没有提供最常用模式1 3. checked exception(jeig n jyejy ...

  10. Atitit java 二维码识别 图片识别

    Atitit java 二维码识别 图片识别 1.1. 解码1 1.2. 首先,我们先说一下二维码一共有40个尺寸.官方叫版本Version.1 1.3. 二维码的样例:2 1.4. 定位图案2 1. ...

最新文章

  1. zendframwork入口关键Zend_Application.php类
  2. Unity 游戏开发技巧集锦之创建自发光材质
  3. grep查找时,去掉grep本身那一条
  4. vs2010文件加载使用简体中文(GB2312)问题解决方案
  5. 有哪些好的 LaTeX 编辑器?
  6. linux下打开配置文件命令_Linux下用户权限相关命令
  7. 记录一次K8s-Flannel插件的坑
  8. SocketIO-nio
  9. 农村70后、80后、90后的儿时玩具有哪些?
  10. Windows API ——GetLogicalDriveStrings——获取逻辑驱动器
  11. cad批量选择相同块_在CAD中如何快速选择相同或类似的图形、图块?
  12. InsecureProgramming-master——abo1
  13. 《大型网站技术架构-核心原理与案例分析》(李智慧 著)第3章-大型网站核心架构要素
  14. Linux内核同步机制之(八):mutex
  15. 反射课后习题及做题记录
  16. mPEG-Phosphate,甲氧基聚乙二醇磷酸盐,mPEG-PHOS
  17. Latex初次使用可能用到的小细节
  18. JS邮箱验证_手机号码验证_电话号码验证-正则验证
  19. 学习笔记——Kaggle_Digit Recognizer (朴素贝叶斯 Python实现)
  20. 39.(前端)欢迎页面的设置

热门文章

  1. selenium安装包_??《手把手教你》系列基础篇之1-python+ selenium自动化测试-环境搭建(详细)...
  2. 40岁学python怎么样_40岁老男人从0开始学Python实录(第5天):到底Python是啥东东?...
  3. java转sap hybris方向_SAP Hybris的Convertor, Populator, Facade和DTO这几个概念是如何协同工作的...
  4. 服务器网站缓存占内存,服务器程序缓存占用内存
  5. linux编程创建文件,快速创建linux文件
  6. [译] 在 Android 使用协程(part III) - 在实际工作中使用
  7. android沉浸式状态栏封装—教你玩出新花样
  8. ubuntu 修改ip后,老ip仍然存在的问题
  9. js中url的对象化管理
  10. Oracle导入导出之dmp