日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

从CSV和VCF文件中获取联系人信息

發布時間:2023/12/14 c/c++ 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从CSV和VCF文件中获取联系人信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??上一篇文章中我們實現了從系統的聯系人數據庫中獲取聯系人信息。文章鏈接:http://blog.csdn.net/github_36878269/article/details/73826289
??但是技術總監又提出了新的需求,用戶想從文件中導入聯系人信息,比如從華為手機助手中導出的聯系人文件。在網上查找了許多的答案,有使用第三方的jar包的,比如什么我也忘了,很是坑爹。所以索性就自己分析導出的文件,從流中讀取數據。

在實體機上使用系統聯系人應用新建幾個聯系人,連接電腦,使用華為手機助手導出聯系人。
??1.導出為CSV格式。
導出的文件內容為:

?耐心的去分析其中數據表達的信息,該文件在windows上提示為”逗號分隔值文件”,是由引號,引號中的內容和逗號組成的。第一行為聯系人信息字段,從第二行開始,每一行代表一個聯系人信息,其中每一個”“中的內容為第一行字段對應的數據。比如第二行中的”張三”對應第一行中的”Given Name”,即用戶姓名。

?根據這個文件格式我們可以從中獲取我們想要的信息。下邊是我的實現代碼。

//fileExtend為選中文件的地址后綴。 if(fileExtend.equals("csv")){//處理CSV格式數據。EntityContact contact = null;try {while((buffer = reader.readLine()) != null){if(buffer.startsWith("\"")){contact = new EntityContact();//聯系人信息行,從中選擇我們想要的信息。String [] infos = buffer.split(",");contact.setName(nullChange(infos[1])); //聯系人姓名。contact.setMobile_num(nullChange(infos[5])); //聯系人手機號。contact.setHome_num(nullChange(infos[6]));//家用電話。contact.setOffice_num(nullChange(infos[7]));//工作電話。contact.setEmail(nullChange(infos[13]));//Email。contact.setHome_address(nullChange(infos[17]));//家庭住址。contact.setOffice_address(nullChange(infos[18]));//工作地址contact.setExtend(nullChange(infos[31]));//備注。contacts.add(contact);//放入集合。}}} catch (Exception e) {//數據格式有問題。contacts = null;} }private static String nullChange(String data){return (data.equals("") ? null : data.replace("\"", "")); }

?我們就可以從contacts這個鏈表中獲取文件中的聯系人信息了。csv格式中不存放聯系人的頭像信息,所以我們就無法從中獲取聯系人的頭像信息。但vcf格式的可以。

??2.vcf格式。
還是分析從華為手機助手導出的聯系人文件(.vcf)。


這種格式和csv格式不同,一條聯系人數據占用很多行,以”BEGIN:VCARD”為開始,以”END:VCARD”為結束,其中的每行數據代表聯系人中的一條信息。如TEL;CELL:13966665555為聯系人?”lisi”?的電話號碼。根據這個尿性,我們可以寫出如下代碼:

//fileExtend為選中文件的地址后綴。 if(fileExtend.equals("vcf")){//處理VCF格式數據。EntityContact contact = null;while((buffer = reader.readLine()) != null){if(buffer.equals("BEGIN:VCARD")){//開始標識符。contact = new EntityContact();} else if(buffer.startsWith("N:;")){//名字。buffer = buffer.substring(buffer.indexOf(";") + 1, buffer.lastIndexOf(";;;"));contact.setName(buffer);} else if(buffer.startsWith("TEL;CELL")){//手機號。buffer = buffer.substring(buffer.indexOf(":") + 1);contact.setMobile_num(buffer);} else if(buffer.startsWith("TEL;WORK;VOICE:")){//工作號碼。buffer = buffer.substring(buffer.indexOf(":") + 1);contact.setOffice_num(buffer);} else if(buffer.startsWith("TEL;HOME;VOICE:")){//家用號碼。buffer = buffer.substring(buffer.indexOf(":") + 1);contact.setHome_num(buffer);} else if(buffer.startsWith("EMAIL;HOME:")){buffer = buffer.substring(buffer.indexOf(":") + 1);contact.setEmail(buffer);} else if(buffer.startsWith("ADR;HOME:")){buffer = buffer.substring(buffer.indexOf(":") + 1, buffer.lastIndexOf(";;;;;;"));contact.setHome_address(buffer);} else if(buffer.startsWith("ADR;WORK:")){buffer = buffer.substring(buffer.indexOf(":") + 1, buffer.lastIndexOf(";;;;;;"));contact.setOffice_address(buffer);} else if(buffer.startsWith("NOTE;WORK:")){buffer = buffer.substring(buffer.indexOf(":") + 1);contact.setExtend(buffer);} else if(buffer.startsWith("PHOTO;")){//頭像數據。buffer = buffer.substring(buffer.indexOf(":") + 1);contact.setPhoto(buffer);}else if(buffer.equals("END:VCARD")){//結束標識符。contacts.add(contact);}} }

?是不是很簡單呢?
總結下解決流程:1.從網上查閱資料,無果,最后放棄。2.從導出的文件中,分析數據,得到數據代表的信息,將數據解析獲取想要的信息。

?如果有不足的地方還請大家指出,謝謝。

下次我還會介紹這兩種格式的文件的導出,以及如何獲取系統目錄(外部存儲,USB存儲)并獲取文件選中的地址。

總結

以上是生活随笔為你收集整理的从CSV和VCF文件中获取联系人信息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。