android通讯木转换工具

标签: Android  Mobile  CVS  数据结构  工作

谷歌手机突然连不上服务器了,这可急死我啦,我的通讯录什么的都在服务器上没有同步过来。

于是手动下载CVS文件导入到手机,这时候发现格式问题不能导入。仔细分析了两个文件的格式,很好都是字符文件,可以通过字符串匹配来手动构造,但是工作量不小。仔细理了下思路,
张三,张三,,,,,,,,,,,,,,,,,,,,,,,,,Starred in Android ::: * My Contacts,,,Mobile,1388377xxxx,Work,89311177,Work,重庆市xxxxxxxxx,,,,,,,,,支点通讯 Fulcrum Enmmmicatlnns,,,,,,,,
数据格式如同上面,我们可以一行一行的读取,然后通过,分割保存在一个数组里面,然后把字符串数组放置在一个集合里面(去构造一个VO也行),这样我们就得到了所有的数据。

BEGIN:VCARD
N:张三三
EMAIL;PREF;HOME:[email protected]
EMAIL;WORK:[email protected]
EMAIL;OTHER:[email protected]
EMAIL;OTHER:[email protected]
TEL;PREF;HOME:55555
TEL;WORK:55555
TEL;OTHER:55555
TEL;OTHER:5858
ADR;PREF;HOME:;;posthome
ADR;WORK:;;postwork
ADR;OTHER:;;postother
NOTE:about
VOICE:0
END:VCARD
BEGIN:VCARD

构造后的数据结构很简单,我们把抽出来的数据通过数组下标取出来,构造成对应的格式
然后保存要求是utf8不然手机解析不了。
好了 有思路,开始写代码了

/**
* 抽取数据并转换
* @param path 谷歌通讯录文件
* @return 处理后的字符串
*/
public String getContent(String path){
   StringBuffer content=new StringBuffer();
   try {
    BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(path), "unicode"));
    String str;
    while((str=br.readLine())!=null){
     String[] tmp=str.split(",");
     content.append("\r\nBEGIN:VCARD\r\nN:"+tmp[0]);
     if(!tmp[28].equals(""))
     content.append("\r\nEMAIL;PREF;HOME:"+tmp[28]);
     if(tmp.length>=30){
      String tel[]=tmp[30].split(":::");
      content.append("\r\nTEL;PREF;MOBILE:"+tel[0]);
      for(int i=1;i<tel.length;i++)
       content.append("\r\nTEL;MOBILE:"+tel[i]);
     }
     if(tmp.length>=34)
     content.append("\r\nADR;HOME:;;"+tmp[34]);
     content.append("\r\nVOICE:0");
     content.append("\r\nEND:VCARD");
    }
    br.close();   
   } catch (FileNotFoundException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   }
   return content.toString().trim();
}

 然后编写一个前端

一个软件就出来了,试着把数据导入手机,ok一切正常!
我把程序和源码打包了,有兴趣的可以自己去看看

点击下载

原文链接:加载失败,请重新获取