欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

使用 cardme 读写 VCard 文件格式,cardmevcard,cardme 是 RFC

来源: javaer 分享于  点击 15275 次 点评:222

使用 cardme 读写 VCard 文件格式,cardmevcard,cardme 是 RFC


cardme 是 RFC 2426 的 Java 实现,可方便读写 VCard 文件格式。

[Java]代码

import info.ineighborhood.cardme.io.CompatibilityMode;import info.ineighborhood.cardme.io.VCardWriter;import info.ineighborhood.cardme.util.StringUtil;import info.ineighborhood.cardme.vcard.VCard;import info.ineighborhood.cardme.vcard.VCardImpl;import info.ineighborhood.cardme.vcard.errors.VCardError;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.List;import javax.swing.JFileChooser;import javax.swing.JOptionPane;/** * Copyright (c) 2004, Neighborhood Technologies * All rights reserved. *  * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: *  * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. *  * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. *  * Neither the name of Neighborhood Technologies nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. *  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. *//** *  * @author George El-Haddad *  * Mar 10, 2010 *  * A Test class to see how to use the VCardEngine. *  */public class TestParser {    private File[] vcardFiles = null;    private VCardEngine vcardEngine = null;    /**     * Creates a new TestParser.     */    public TestParser() {        vcardEngine = new VCardEngine();    }    /**     * Sets the compatibility mode.     *     * @param compatMode     */    public void setCompatibilityMode(CompatibilityMode compatMode) {        vcardEngine.setCompatibilityMode(compatMode);    }    /**     * Retrieve all VCard files and then parse them.     *     * @return {@link List}<VCard>     */    public List importVCards() {        List vcards = new ArrayList();        vcardFiles = getFiles();        for(int i = 0; i < vcardFiles.length; i++) {            try {                VCard vcard = vcardEngine.parse(vcardFiles[i]);                vcards.add(vcard);            }            catch(IOException ioe) {                System.err.println("Could not read vcard file: "+vcardFiles[i].getAbsolutePath());                ioe.printStackTrace();            }        }        return vcards;    }    /**     * Opens a file chooser dialog to select VCard files.     *      * @return {@link File}[]     */    private File[] getFiles()    {        JFileChooser chooser = new JFileChooser();        chooser.setDialogTitle("Select VCards");        chooser.setCurrentDirectory(new File(System.getProperties().getProperty("user.home")));        chooser.setMultiSelectionEnabled(true);        chooser.setFileFilter(new javax.swing.filechooser.FileFilter() {            @Override            public boolean accept(File f) {                return f.getName().toLowerCase().endsWith(".vcf") || f.isDirectory();            }            public @Override            String getDescription() {                return "VCard Files";            }        });        int result = chooser.showOpenDialog(null);        if(result == JFileChooser.CANCEL_OPTION) {            return null;        }        try {            File[] files = chooser.getSelectedFiles(); // get the file            return files;        }        catch(Exception ex) {            JOptionPane.showMessageDialog(null, "Warning! Could not load the file(s)!", "Warning!", JOptionPane.WARNING_MESSAGE);            return null;        }    }    /**     * This is the main method. Here the TestParses in created and initialized.     * A VCardWriter is created to write the imported vcards to the System.out so     * we can see if everything got imported and written correctly.     *      * @param args     */    public static void main(String[] args) {        TestParser testParser = new TestParser();        testParser.setCompatibilityMode(CompatibilityMode.RFC2426);        List vcards = testParser.importVCards();        VCardWriter writer = new VCardWriter();        for(int i = 0; i < vcards.size(); i++) {            VCardImpl vcard = (VCardImpl)vcards.get(i);            writer.setVCard(vcard);            String vstring = writer.buildVCardString();            if(writer.hasErrors()) {                List errors = vcard.getErrors();                for(int j = 0; j < errors.size(); j++) {                    System.out.println(StringUtil.formatException(errors.get(j).getError()));                }            }            System.out.println(vstring);        }        System.out.println("\n-- END --");    }}
相关栏目:

用户点评