Atitit Java制作VCARD vcf 以上就是关于vCard的基本介绍,维基百科(英文)https://en.wikipedia.org/wiki/VCard写的比较全,可惜我看不懂。
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写的比较全,可惜我看不懂。相关推荐
- Java制作VCARD
转载自 Java制作VCARD 简介: vCard是电子名片的文件格式标准.它一般附加在电子邮件之后,但也可以用于其它场合(如在互联网上相互交换).vCard可包含的信息有:姓名.地址资讯.电话号 ...
- VCard(.VCF) 2.1(rfc-2426)标准通信薄基本格式
http://www.imc.org/pdi/vcard-21.txt vCard 规范容许公开交换个人数据交换 (Personal Data Interchange PDI) 信息,在传统纸质商业名 ...
- java 维基百科_wikipedia
popup的使用(一)2021-01-22 16:35:58 核心代码 注意Hyperlink的使用 You can use a Popup to provide a link for a speci ...
- 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)需 ...
- Atitit JAVA p2p设计与总结 JXTA 2
Atitit JAVA p2p设计与总结 JXTA 2 JXTA 2 是开放源代码 P2P 网络的第二个主要版本,它利用流行的.基于 Java 的参考实现作为构建基础.在设计方面进行了重要的修改,以 ...
- Atitit.Java exe bat 作为windows系统服务程序运行
Atitit.Java exe bat 作为windows系统服务程序运行 1. 使用SC命令+srvany.exe (不错,推荐)+net start1 1.1. First 创建一个java的运 ...
- atitit. java jsoup html table的读取解析 总结
atitit. java jsoup html table的读取解析 总结 1. 两个大的parser ,,,jsoup 跟个 htmlparser 1 2. 资料比较 1 3. jsoup越佳. ...
- Atitit Java OpenCV 捕获视频
Atitit Java OpenCV 捕获视频 ,打开一段视频或默认的摄像头 有两种方法,一种是在定义类的时候,一种是用open()方法. 一. 读取视频序列 OpenCV提供了一个简便易用的框架以 ...
- Atitit.java c#这类编程语言的设计失败点attilax总结
Atitit.java c#这类编程语言的设计失败点attilax总结 1. Npe1 2. Api粒度过小而又没有提供最常用模式1 3. checked exception(jeig n jyejy ...
- Atitit java 二维码识别 图片识别
Atitit java 二维码识别 图片识别 1.1. 解码1 1.2. 首先,我们先说一下二维码一共有40个尺寸.官方叫版本Version.1 1.3. 二维码的样例:2 1.4. 定位图案2 1. ...
最新文章
- zendframwork入口关键Zend_Application.php类
- Unity 游戏开发技巧集锦之创建自发光材质
- grep查找时,去掉grep本身那一条
- vs2010文件加载使用简体中文(GB2312)问题解决方案
- 有哪些好的 LaTeX 编辑器?
- linux下打开配置文件命令_Linux下用户权限相关命令
- 记录一次K8s-Flannel插件的坑
- SocketIO-nio
- 农村70后、80后、90后的儿时玩具有哪些?
- Windows API ——GetLogicalDriveStrings——获取逻辑驱动器
- cad批量选择相同块_在CAD中如何快速选择相同或类似的图形、图块?
- InsecureProgramming-master——abo1
- 《大型网站技术架构-核心原理与案例分析》(李智慧 著)第3章-大型网站核心架构要素
- Linux内核同步机制之(八):mutex
- 反射课后习题及做题记录
- mPEG-Phosphate,甲氧基聚乙二醇磷酸盐,mPEG-PHOS
- Latex初次使用可能用到的小细节
- JS邮箱验证_手机号码验证_电话号码验证-正则验证
- 学习笔记——Kaggle_Digit Recognizer (朴素贝叶斯 Python实现)
- 39.(前端)欢迎页面的设置
热门文章
- selenium安装包_??《手把手教你》系列基础篇之1-python+ selenium自动化测试-环境搭建(详细)...
- 40岁学python怎么样_40岁老男人从0开始学Python实录(第5天):到底Python是啥东东?...
- java转sap hybris方向_SAP Hybris的Convertor, Populator, Facade和DTO这几个概念是如何协同工作的...
- 服务器网站缓存占内存,服务器程序缓存占用内存
- linux编程创建文件,快速创建linux文件
- [译] 在 Android 使用协程(part III) - 在实际工作中使用
- android沉浸式状态栏封装—教你玩出新花样
- ubuntu 修改ip后,老ip仍然存在的问题
- js中url的对象化管理
- Oracle导入导出之dmp