`
xp9800
  • 浏览: 36380 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

java读取柳丁来电xml生成vcf电话联系人

    博客分类:
  • java
阅读更多
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class Test {
	
	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		//	System.out.println(qpDecoding("=E8=81=94=E6=83=B3=E7=A7=BB=E5=8A=A8=E7=83=AD=E7=BA=BF"));
		//	System.out.println(qpEncodeing("联想移动热线"));
		
		SAXReader reader = new SAXReader();
		Document doc = null;
		try {
			doc = reader.read("WebRoot/phone.xml");
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//	List<Node> list =(List<Node>)  doc.selectNodes("//newdingBackup/block/contact");
		Element e = (Element) doc.selectSingleNode("//newdingBackup/block");
		String name = "";
		String tel = "";
		List childnodes = e.elements();
		String pix = "";
		String text = "";
		String encodeName = "";
		for (int i = 0; i < childnodes.size(); i++) {
			Element e1 = (Element) childnodes.get(i);
			name = e1.valueOf("@LastName");
			e1 = e1.element("mobilePhone");
			if (e1 != null)
				tel = e1.valueOf("@value");
			String[] str = tel.split(" ");
			tel = str[0];
			if (i < 10) {
				pix = "00" + i;
			} else if (i < 100) {
				pix = "0" + i;
			} else {
				pix = i + "";
			}
			
			FileWriter fw = new FileWriter("d:/phone/" + name + "_" + pix
					+ ".vcf");//创建FileWriter对象,用来写入字符流
			BufferedWriter bw = new BufferedWriter(fw);
			text = "BEGIN:VCARD\nVERSION:2.1\nN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:";
			encodeName = qpEncodeing(name);
			text = text + encodeName;
			text = text + "\nTEL;CELL:" + tel + "\nEND:VCARD";
			bw.write(text);
			bw.close();
			fw.close();
			
		}
		System.out.println("ok");
	}
	
	/*
	 * 解码
	 */

	public static String qpDecoding(String str) {
		if (str == null) {
			return "";
		}
		try {
			str = str.replaceAll("=\n", "");
			byte[] bytes = str.getBytes("US-ASCII");
			for (int i = 0; i < bytes.length; i++) {
				byte b = bytes[i];
				if (b != 95) {
					bytes[i] = b;
				} else {
					bytes[i] = 32;
				}
			}
			if (bytes == null) {
				return "";
			}
			ByteArrayOutputStream buffer = new ByteArrayOutputStream();
			for (int i = 0; i < bytes.length; i++) {
				int b = bytes[i];
				if (b == '=') {
					try {
						int u = Character.digit((char) bytes[++i], 16);
						int l = Character.digit((char) bytes[++i], 16);
						if (u == -1 || l == -1) {
							continue;
						}
						buffer.write((char) ((u << 4) + l));
					} catch (ArrayIndexOutOfBoundsException e) {
						e.printStackTrace();
					}
				} else {
					buffer.write(b);
				}
			}
			return new String(buffer.toByteArray(), "UTF-8");
		} catch (Exception e) {
			e.printStackTrace();
			return "";
		}
	}
	
	/*
	 * 编码
	 */

	public static String qpEncodeing(String str) {
		char[] encode = str.toCharArray();
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < encode.length; i++) {
			if ((encode[i] >= '!') && (encode[i] <= '~') && (encode[i] != '=')
					&& (encode[i] != '\n')) {
				sb.append(encode[i]);
			} else if (encode[i] == '=') {
				sb.append("=3D");
			} else if (encode[i] == '\n') {
				sb.append("\n");
			} else {
				StringBuffer sbother = new StringBuffer();
				sbother.append(encode[i]);
				String ss = sbother.toString();
				byte[] buf = null;
				try {
					buf = ss.getBytes("utf-8");
				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				}
				if (buf.length == 3) {
					for (int j = 0; j < 3; j++) {
						String s16 = String
								.valueOf(Integer.toHexString(buf[j]));
						// 抽取中文字符16进制字节的后两位,也就是=E8等号后面的两位,
						// 三个代表一个中文字符
						char c16_6;
						char c16_7;
						if (s16.charAt(6) >= 97 && s16.charAt(6) <= 122) {
							c16_6 = (char) (s16.charAt(6) - 32);
						} else {
							c16_6 = s16.charAt(6);
						}
						if (s16.charAt(7) >= 97 && s16.charAt(7) <= 122) {
							c16_7 = (char) (s16.charAt(7) - 32);
						} else {
							c16_7 = s16.charAt(7);
						}
						sb.append("=" + c16_6 + c16_7);
					}
				}
			}
		}
		return sb.toString();
	}
	
}

分享到:
评论

相关推荐

    C# 生成VCF demo源代码,支持Android,outlook QuotedPrintable 中文编码

    VCF(vCard)是一种标准格式,用于存储个人联系信息,如姓名、电话号码、电子邮件地址等。在C#中,生成VCF文件可以帮助你创建和管理这些联系人信息,并能在多个平台,如Android和Outlook,之间共享。本demo源代码...

    vcf文件生成器

    VCF文件生成器是一款实用工具,专为需要将Excel中的联系人信息转化为VCF格式而设计。VCF,全称是vCard(虚拟名片)格式,是一种标准的电子名片交换格式,广泛应用于移动设备和电子邮件客户端,使得用户能够方便地...

    PHP生成vcf文件的类

    一个PHP写的类,用来生成VCF文件,该生成的文件可以直接导入手机通讯录,非常好用。

    vcf文件生成器(excel转vcf)

    "vcf文件生成器(excel转vcf)"是一个实用工具,它的主要功能是帮助用户将Excel表格中的联系人数据转换为VCF格式,以便于批量导入到各种通讯软件或设备中。这个工具可以显著提高处理大量联系人信息的效率,避免手动...

    VCF生成器.rar

    5. **批量生成**:为了批量生成VCF文件,程序可能提供了读取CSV或其他格式数据的功能,这样用户就可以一次性导入大量联系人信息并生成对应的VCF文件。 6. **错误处理**:良好的源码会包含适当的错误处理机制,例如...

    C# excel转vcf生成器

    2. 处理读取到的数据,根据VCF格式的要求组织联系人信息,例如,将A列的姓名、B列的电话号码等对应到VCF文件的字段。 3. 创建VCF文件,将处理好的数据写入文件。VCF文件的结构是文本的,因此可以使用StreamWriter类...

    vcf文件生成器 v4.6.zip

    vcf文件生成器将EXCEL文件的通讯录转换成vcf文件,可以直接在android系统的手机通讯录导入。支持工作单位、职位、单位地址、网址、传真、家庭地址、qq号码的导入。 vcf文件生成器 v4.6更新日志: 1、增加了多选...

    易语言VCF生成器

    易语言VCF生成器源码,VCF生成器,生成vcf,取随机字母

    VCF名片批量生成

    VCF名片批量生成是一种高效管理个人联系信息的方式,尤其在商业环境中,当需要与大量人交换联系方式时,这种格式显得尤为实用。VCF,全称为“Virtual Contact File”,是一种标准的电子名片格式,广泛用于存储和交换...

    从excel中批量导入生成VCF文件

    VCF(vCard)文件是一种常见的电子名片格式,用于存储个人联系人信息,如姓名、电话号码、电子邮件地址等。在IT行业中,批量处理VCF文件对于管理大量联系人信息非常有用,尤其是在需要同步到各种设备或应用时。Excel...

    excel,csv 转 vcf 联系人工具

    CSV(Comma Separated Values)是一种通用的数据交换格式,简单且易于读写,适合包含联系人姓名、电话号码、电子邮件等信息的列表。VCF则如前所述,是联系人数据的标准格式。 在压缩包内的“VCF.exe”文件很可能是...

    通讯录vcf转excel工具_v6.6.3_vCard_excel转vCard_vcf文件生成器_

    VCF到Excel的转换过程涉及到读取VCF文件中的各个字段,如姓名、电话号码、电子邮件地址等,并将这些信息导入到Excel表格中,形成结构化的数据。这使得用户可以利用Excel的公式、过滤和排序功能对联系人数据进行分析...

    csv.rar_csv_csv java_csv java_java vcf csv_java操作v

    在IT行业中,CSV(Comma Separated Values)和VCF(vCard)是两种常见的文件格式,它们分别用于数据存储和联系人管理。本篇文章将深入探讨如何在Java环境中处理这两种格式,特别是如何使用Java来解析VCF文件,并将...

    vcf的导入与导出

    在IT领域,特别是在通信、移动设备以及联系人管理软件中,VCF(Virtual Card Format)是一种常见的文件格式,用于存储个人联系人的信息。这种格式允许用户轻松地在不同设备之间共享和转移联系人数据。本文将详细介绍...

    易语言源码易语言VCF生成器源码.rar

    VCF文件通常包含姓名、电话号码、电子邮件地址、公司信息等联系人细节,以特定的XML样式的键值对形式存储。在易语言中,我们需要解析或创建这些键值对,并将它们写入文件。 1. **易语言基础**: 易语言提供了丰富...

    1500条联系人数据+vcf格式(性能测试专用)

    开发联系人管理功能时,有时需要从手机中批量读取联系人,联系人比较多的时候,性能问题就会凸显出来.为了方便测试,这里整理了1500条联系人数据,,欢迎下载.

    vcf电子通讯录文件生成小工具

    这是一个轻量化的vcf名片生成工具,能将excel制作的表格轻松编码成手机支持的vcf格式,从而实现批量导入手机号码到通讯录。此版本只支持存储姓名与手机号码两个属性。

    excel转vcf

    6. 完成后,用户可以在手机或其他设备上导入生成的VCF文件,将联系人信息添加到通讯录。 总的来说,这个工具解决了将大量联系人数据从Excel迁移到手机通讯录的问题,避免了手动输入的繁琐工作,提高了效率。对于...

    XmlVcf格式手机通讯录转换工具

    XML与VCF格式的手机电话本转换工具,小巧方便实用,实在不可多得,分享一下下!记得给好评哟!

    VCF手机电话本通讯录导入导出,彻底解决乱码问题

    VCF(vCard Format)是一种常见的电子名片格式,用于存储个人联系信息,如姓名、电话号码、电子邮件地址等。在处理VCF文件时,尤其是在不同设备间导入导出时,可能会遇到乱码的问题,这通常是由于编码不兼容或格式...

Global site tag (gtag.js) - Google Analytics