??上篇文章中,我們介紹了如何從csv和vcf格式的文件中獲取聯系人信息。鏈接:http://blog.csdn.net/github_36878269/article/details/76696685
這次我們反著來,將聯系人信息導出為這兩種格式的文件。上篇文章中我們已經介紹了這兩種格式文件,不再贅述。直接貼代碼。
??1.導出為vcf格式。
try{
public static void exportAsVCF(List<EntityContact> contacts){
try{String path = Environment.getExternalStorageDirectory() +
"/test/VCFContacts.vcf"; OutputStreamWriter writer =
new OutputStreamWriter(
new FileOutputStream(path),
"UTF-8");
for(EntityContact contact : contacts){writer.write(
"BEGIN:VCARD\r\n");writer.write(
"VERSION:3.0\r\n");
if(contact.getName() !=
null){writer.write(
"N:;" + contact.getName() +
";;;\r\n");}
if(contact.getMobile_num() !=
null){writer.write(
"TEL;CELL:" + contact.getMobile_num() +
"\r\n");}
if(contact.getOffice_num() !=
null){writer.write(
"TEL;WORK;VOICE:" + contact.getOffice_num() +
"\r\n");}
if(contact.getHome_num() !=
null){writer.write(
"TEL;HOME;VOICE:" + contact.getHome_num() +
"\r\n");}
if(contact.getEmail() !=
null){writer.write(
"EMAIL;HOME:" + contact.getEmail() +
"\r\n");}
if(contact.getHome_address() !=
null){writer.write(
"ADR;HOME:" + contact.getHome_address() +
";;;;;;\r\n");}
if(contact.getOffice_address() !=
null){writer.write(
"ADR;WORK:" + contact.getOffice_address() +
";;;;;;\r\n");}
if(contact.getExtend() !=
null){writer.write(
"NOTE;WORK:" + contact.getExtend() +
"\r\n");}String photo = contact.getPhoto();
if(photo !=
null){
byte [] photoByte = Base64.decode(photo, Base64.NO_WRAP);String photoType =
null;
if (photoByte.length >=
3 && photoByte[
0] ==
'G' && photoByte[
1] ==
'I' && photoByte[
2] ==
'F') {photoType =
"GIF";}
else if (photoByte.length >=
4 && photoByte[
0] == (
byte)
0x89&& photoByte[
1] ==
'P' && photoByte[
2] ==
'N' && photoByte[
3] ==
'G') {photoType =
"PNG";}
else if (photoByte.length >=
2 && photoByte[
0] == (
byte)
0xff&& photoByte[
1] == (
byte)
0xd8) {photoType =
"JPEG";}
else {photoType =
"unknow";}writer.write(
"PHOTO;ENCODING=B;TYPE=" + photoType +
":" + photo +
"\r\n");}writer.write(
"END:VCARD");
if(contacts.indexOf(contact) != (contacts.size() -
1)){writer.write(
"\r\n");}}writer.flush();writer.close();}
catch (UnsupportedEncodingException e) { e.printStackTrace(); }
catch (FileNotFoundException e) { e.printStackTrace(); }
catch (IOException e) { e.printStackTrace(); }
}
上述代碼完成了獲取鏈表中的聯系人信息,并逐條的寫入到內部存儲的/test/contactsVCF.vcf文件里。其中EntityContact為自定義的實體類,我只獲取了我感興趣的數據,其中的成員變量都在代碼中引用了,就不貼該實體類的代碼了。
??2.csv格式的導出。
根據上篇文章所述,我們根據該格式來講聯系人導出,下面是具體代碼:
/*** 將數據導出為CSV格式的。* @param contacts*/
public static void exportAsCSV(List<EntityContact> contacts){String csvPath = Environment.getExternalStorageDirectory() +
"/test/CSVContacts.csv"OutputStreamWriter csvwritertry {csvwriter = new OutputStreamWriter(new FileOutputStream(csvPath),
"UTF-8")//添加三個字節,使文件為帶bom的utf8格式的文件。csvwriter.write(new String(new byte[]{(byte)
0xEF, (byte)
0xBB, (byte)
0xBF}))csvwriter.write(
"Family Name,Given Name,Additional Name,Prefix Name,Suffix Name," +
"Mobile Number,Home Number,Office Number,Home Fax,Bussiness Fax,Pager,Other,customize," +
"Home Email,Work Email,Other Email,customize,Address Home,Address Work,Address Other,"+
"customize,Organization Work,Organization Other,customize,AIM,Windows Live,YAHOO," +
"SKYPE-USERNAME,OICQ,GOOGLE-TALK,JABBER,Notes,NickName,WebPage,Ptt/DC1,Ptt/DC2")
for(EntityContact contact : contacts){csvwriter.write(
"\r\n\"\
",")
if(contact.getName() != null){csvwriter.write(
"\"" + contact.getName() + "\
",")}
else {csvwriter.write(
"\"\
",")}csvwriter.write(
"\"\
",\"\
",\"\
",")
if(contact.getMobile_num() != null){csvwriter.write(
"\"" + contact.getMobile_num() + "\
",")}
else{csvwriter.write(
"\"\
",")}
if(contact.getHome_num() != null){csvwriter.write(
"\"" + contact.getHome_num() + "\
",")}
else{csvwriter.write(
"\"\
",")}
if(contact.getOffice_num() != null){csvwriter.write(
"\"" + contact.getOffice_num() + "\
",")}
else{csvwriter.write(
"\"\
",")}csvwriter.write(
"\"\
",\"\
",\"\
",\"\
",\"\
",")
if(contact.getEmail() != null){csvwriter.write(
"\"" + contact.getEmail() + "\
",")}
else{csvwriter.write(
"\"\
",")}csvwriter.write(
"\"\
",\"\
",\"\
",")
if(contact.getHome_address() != null){csvwriter.write(
"\"" + contact.getHome_address() + "\
",")}
else{csvwriter.write(
"\"\
",")}
if(contact.getOffice_address() != null){csvwriter.write(
"\"" + contact.getOffice_address() + "\
",")}
else{csvwriter.write(
"\"\
",")}csvwriter.write(
"\"\
",\"\
",\"\
",\"\
",\"\
",\"\
",\"\
",\"\
",\"\
",\"\
",\"\
",\"\
",")
if(contact.getExtend() != null){csvwriter.write(
"\"" + contact.getExtend() + "\
",")}
else{csvwriter.write(
"\"\
",")}csvwriter.write(
"\"\
",\"\
",\"\
",\"\
"")}csvwriter.flush()csvwriter.close()} catch (IOException e) {e.printStackTrace()}
}
??需要說明的是在11行添加的三個byte,為什么要這么做?因為如果不添加這三個byte,也就是默認導出,導出的文件格式為UTF-8無BOM格式,該格式再windows上無法用華為手機助手解析該文件,所以要加上這三個byte,來實現從電腦導入聯系人的功能。
好的,關于聯系人信息的導出我們就介紹到這了,有不足的地方,還望大家能指出來。
總結
以上是生活随笔為你收集整理的将联系人信息导出为CSV和VCF格式文件的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。