无法读取带地址的vcards [英] Unable to read vcards with address

查看:171
本文介绍了无法读取带地址的vcards的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请查看以下代码

package vcardtest;

import java.io.*;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.sourceforge.cardme.engine.VCardEngine;
import net.sourceforge.cardme.vcard.VCard;
import net.sourceforge.cardme.vcard.features.*;
import net.sourceforge.cardme.vcard.types.parameters.TelephoneParameterType;
import net.sourceforge.cardme.vcard.types.parameters.XTelephoneParameterType;

public class VCardTest 
{

    public static void main(String[] args) 
    {
        File vcardFile = new File("C:/Users/yohan/Contacts/Akon Kon.vcf");
        VCardEngine vcardEngine = new VCardEngine();
        try 
        {
            VCard vcard = vcardEngine.parse(vcardFile);
            String name = vcard.getName().getGivenName();

            if(vcard.hasEmails())
            {
                 EmailFeature email = vcard.getEmails().next();
                String sEmail = email.getEmail();
                   System.out.println(sEmail);
            }


            if(vcard.hasNicknames())
            {
            NicknameFeature nickName = vcard.getNicknames();
            Iterator<String> nicknames = nickName.getNicknames();
            String sNickName = nicknames.next();  
             System.out.println(sNickName);
            }


           // if(vcard.hasAddresses())
            //{
            //Iterator<AddressFeature> addresses = vcard.getAddresses();
            //AddressFeature address = addresses.next();
            //String streetAddress = address.getStreetAddress();
            //System.out.println(streetAddress);
            //}
            String telephone = "";


            //Getting the phone numbers

            Iterator<TelephoneFeature> itNumbers = vcard.getTelephoneNumbers();

            while (itNumbers.hasNext()) 
            {

                TelephoneFeature next1 = itNumbers.next();
                telephone = next1.getTelephone();

           //     System.out.println(telephone);
                System.out.println("types = " + next1.getExtendedTelephoneParameterSize());

                Iterator<XTelephoneParameterType> itTypes = next1.getExtendedTelephoneParameterTypes();

                Iterator<TelephoneParameterType> itNTypes = next1.getTelephoneParameterTypes();

                while (itNTypes .hasNext()) 
                {

                        TelephoneParameterType next = itNTypes .next();
                        System.out.println(" - " + next.getType() + " / " + next.getDescription());

                        if(next.getType().equals("CELL"))
                        {
                            System.out.println("Cell Phone Number: " + next1.getTelephone());
                        }
                        else if(next.getType().equals("HOME"))
                        {
                            System.out.println("Home Number is: " + next1.getTelephone());
                        }

                }

            }



            System.out.println("---------------------------------------------------------------------");
            System.out.println( name );


            //System.out.println(streetAddress);



        } catch (IOException ex) 
        {
           ex.printStackTrace();
        }
    }
}

如果我通过VCard一个地址,这会产生以下错误

If I pass a VCard with an address, this generates the following error


run:线程main中的异常java.lang.NoClassDefFoundError:
org / apache / commons / codec / net / QuotedPrintableCodec at
net.sourceforge.cardme.engine.VCardEngine.parseLabelType(VCardEngine.java:1432)
at
net.sourceforge.cardme.engine.VCardEngine .parseLine(VCardEngine.java:523)
at
net.sourceforge.cardme.engine.VCardEngine.parseVCard(VCardEngine.java:348)
at
net.sourceforge.cardme .engine.VCardEngine.parse(VCardEngine.java:254)
at vcardtest.VCardTest.main(VCardTest.java:22)引起:
java.lang.ClassNotFoundException:
org.apache .commons.codec.net.QuotedPrintableCodec at
java.net.URLClassLoader $ 1.run(URLClassLoader.java:366)at
java.net.URLClassLoader $ 1.run(URLClassLoader.java:355)at
java.security.Acces在
java.net.URLClassLoader.findClass(URLClassLoader.java:354)的
java.lang.ClassLoader.loadClass(ClassLoader.java:423)
的sController.doPrivileged(Native Method) sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:308)at
java.lang.ClassLoader.loadClass(ClassLoader.java:356)... 5 more Java
结果:1 BUILD SUCCESSFUL (总时间:2秒)

run: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/codec/net/QuotedPrintableCodec at net.sourceforge.cardme.engine.VCardEngine.parseLabelType(VCardEngine.java:1432) at net.sourceforge.cardme.engine.VCardEngine.parseLine(VCardEngine.java:523) at net.sourceforge.cardme.engine.VCardEngine.parseVCard(VCardEngine.java:348) at net.sourceforge.cardme.engine.VCardEngine.parse(VCardEngine.java:254) at vcardtest.VCardTest.main(VCardTest.java:22) Caused by: java.lang.ClassNotFoundException: org.apache.commons.codec.net.QuotedPrintableCodec at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:423) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) ... 5 more Java Result: 1 BUILD SUCCESSFUL (total time: 2 seconds)

在我使用的测试VCard之后,我的手机生成,发送到笔记本电脑并转换到.contact,并使用windows的contacts文件夹中的选项手动转换回.vcf。

Following the test VCard I used, which is generated by my phone, send to laptop and got converted to .contact, and manually converted back to .vcf using options in the contacts folder of windows.

BEGIN:VCARD
VERSION:2.1
N:Kon;Akon
FN:Akon Kon
TEL;CELL;VOICE:0711111111
ADR;HOME:;;195;Colj;Sri lanka
LABEL;HOME;ENCODING=QUOTED-PRINTABLE:195=0D=0AColj, Sri lanka
EMAIL;PREF;INTERNET:akok@a.com
REV:20120828T061900Z
END:VCARD

请帮助!

推荐答案

您似乎错过了 Apache Commons Codec库

您需要下载它&它的依赖关系&将它们添加到您的类路径

You'll need to download it & its dependencies & add them to your class path

这篇关于无法读取带地址的vcards的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆