使用 cardme 读写 VCard 文件格式,cardmevcard,cardme 是 RFC
分享于 点击 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 --"); }}
用户点评