• 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

     

     

     

  • 相关阅读:
    [java]struts2入门
    [c#基础]ICloneable接口
    idea jsp html 空白页的问题
    在Intellij Idea中使用jstl标签库
    org.apache.catalina.LifecycleException: Failed to start component
    tomcat点击startup.bat一闪而退的方法
    [转]小心C# 5.0 中的await and async模式造成的死锁
    体验h5离线缓存
    [Asp.net core]使用Polly网络请求异常重试
    asp.net core读取appsettings.json,如何读取多环境开发配置
  • 原文地址:https://www.cnblogs.com/attilax/p/15197499.html
Copyright © 2020-2023  润新知