谷歌手机突然连不上服务器了,这可急死我啦,我的通讯录什么的都在服务器上没有同步过来。
于是手动下载CVS文件导入到手机,这时候发现格式问题不能导入。仔细分析了两个文件的格式,很好都是字符文件,可以通过字符串匹配来手动构造,但是工作量不小。仔细理了下思路,
张三,张三,,,,,,,,,,,,,,,,,,,,,,,,,Starred in Android ::: * My Contacts,,,Mobile,1388377xxxx,Work,89311177,Work,重庆市xxxxxxxxx,,,,,,,,,支点通讯 Fulcrum Enmmmicatlnns,,,,,,,,
数据格式如同上面,我们可以一行一行的读取,然后通过,分割保存在一个数组里面,然后把字符串数组放置在一个集合里面(去构造一个VO也行),这样我们就得到了所有的数据。
BEGIN:VCARD
N:张三三
EMAIL;PREF;HOME:cfg@gg.b
EMAIL;WORK:work@gg.b
EMAIL;OTHER:other@fc.vv
EMAIL;OTHER:other@ff.b
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();
}