Package Com.yfli.test;import Java.io.bufferedreader;import Java.io.bufferedwriter;import Java.io.bytearrayoutputstream;import Java.io.file;import Java.io.fileinputstream;import Java.io.filenotfoundexception;import Java.io.ioexception;import Java.io.inputstream;import Java.io.inputstreamreader;import Java.io.printwriter;import Java.io.unsupportedencodingexception;import Java.util.arraylist;import Java.util.list;import Java.util.regex.matcher;import Java.util.regex.Pattern;import Import and export of Org.junit.test;import org.omg.corba.systemexception;import com.yfli.entity.addressbean;/** *. vcf format File * @author Yfli * */public class Importvcftest {@Testpublic void importvcf () {FileInputStream fis = null;try {fis = new fileinputstre AM (New File ("SRC/IMPORT_CONTACTS.VCF")); list<addressbean> Addressbeans = this.importvcffilecontact (FIS); System.out.println (Addressbeans.size ()); for (Addressbean Addressbean:addressbeans) {System.out.println ("Turename: "+ addressbean.gettruename ()); System.out.println ("Mobile: "+ addressbean.getmobile ()); System.out.println ("Workmobile:" + addressbean.getworkmobile ()); System.out.println ("Email:" + addressbean.getemail ()); System.out.println ("--------------------------------");}} catch (FileNotFoundException e) {e.printstacktrace ();}} @Testpublic void exportvcf () {try {list<addressbean> Addressbeans = new arraylist<addressbean> (); Addressbean Addressbean = new Addressbean () addressbean.settruename ("Zhangjie"); Addressbean.setmobile ("18255963695 "); Addressbeans.add (addressbean); Addressbean = new Addressbean (); Addressbean.settruename (" Zhang San "); Addressbean.setmobile ("15255963695"); Addressbeans.add (Addressbean); File File = new file ("SRC/EXPORT_CONTACTS.VCF"), if (File.exists ()) {file.createnewfile ();} BufferedWriter reader = new BufferedWriter (new PrintWriter (file)), for (Addressbean Bean:addressbeans) {reader.write (" Begin:vcard "), Reader.write (" \ r \ n "), Reader.write (" version:2.1 "), Reader.write (" \ r \ n "); Charset=utf-8; Encoding=quoted-priNtable: "+ this.qpencodeing (Bean.gettruename ()) +"; "); Reader.write ("\ r \ n"); if (""! = Bean.getmobile () && bean.getmobile ()! = null) {reader.write ("TEL; CELL: "+ bean.getmobile () +" "); Reader.write (" \ r \ n ");} if (""! = Bean.getworkmobile () && bean.getworkmobile ()! = null) {reader.write ("TEL; Work: "+ bean.getworkmobile () +" "); Reader.write (" \ r \ n ");} if (""! = Bean.gettelephone () && bean.gettelephone ()! = null) {reader.write ("TEL; HOME: "+ bean.gettelephone () +" "); Reader.write (" \ r \ n ");} if (""! = Bean.getemail () && bean.getemail ()! = null) {Reader.write ("EMAIL:" + bean.getemail () + ""); Reader.write ( "\ r \ n");} Reader.write ("End:vcard"); Reader.write ("\ r \ n");} Reader.flush (); Reader.close ();} catch (Exception e) {e.printstacktrace ();}} /** * Import Contacts * @param in * @return * @throws systemexception */public static list<addressbean> importvcffilecontact (I Nputstream in) throws SystemException {list<addressbean> Addressbeans = new arraylist<addressbean> (); try{BufferedReader reader = new BufferedReader (new InputStreamReader (in)); StringBuffer bu = new StringBuffer (); String Line;while (line = importvcftest.nextline (reader))! = null) {Bu.append (line + "\ r \ n");} Pattern p = pattern.compile ("Begin:vcard (\\r\\n) ([\\s\\S\\r\\n\\.] *?) End:vcard "); Matcher m = P.matcher (Bu.tostring ()), while (M.find ()) {Addressbean is = new Addressbean (); String str = m.group (0); Pattern pn = Pattern.compile ("N; [\\s\\S\\r\\n\\.] *?) ([\\r\\n]);//name Matcher MN = Pn.matcher (m.group (0)), while (Mn.find ()) {String name = "", if (Mn.group (1). IndexOf (" Encoding=quoted-printable ") >-1) {name = Mn.group (1). substring (Mn.group (1). IndexOf (" encoding=quoted-printable: " + "encoding=quoted-printable:". Length ()); name = Name.substring (Name.indexof (":") + 1); if (Name.indexof (";") >-1) {name = name.substring (0, Name.indexof (";")); Be.settruename (importvcftest.qpdecoding (name));} else {be.settruename (importvcftest.qpdecoding (name));}} else {Pattern PNN = Pattern.compile ("charset= ([A-ZA-z0-9-]*?): "); Matcher mnn = Pnn.matcher (Mn.group (1)), while (Mnn.find ()) {name = Mn.group (1). substring (Mn.group (1). IndexOf (Mnn.group (0)) + mnn.group (0). Length ()); Be.settruename (name);}} String cell = ""; Pattern P1 = Pattern.compile ("TEL; CELL: ([\\s*\\d*\\s*\\d*\\s*\\d*]*?) ([\\r\\n]); Matcher m1 = P1.matcher (str); while (M1.find ()) {String Tel = m1.group (0); cell = Tel.substring ("TEL; CELL: ". Length ());} Be.setmobile (cell); String work = ""; Pattern P2 = pattern.compile ("TEL; work:\\d* ([\\s*\\d*\\s*\\d*\\s*\\d*]*?) ([\\r\\n]); Matcher m2 = p2.matcher (str), while (M2.find ()) {System.out.println ("Worktel:" + m2.group (0)), work = M2.group (0). Substri Ng (M2.group (0). IndexOf ("TEL; Work: ") +" TEL; Work: ". Length ());} Be.setworkmobile (work); String home = ""; Pattern p3 = pattern.compile ("TEL; HOME: ([\\s*\\d*\\s*\\d*\\s*\\d*]*?) ([\\r\\n]); Matcher m3 = p3.matcher (str); while (M3.find ()) {home = M3.group (0). Substring (m3.group (0). IndexOf ("TEL; HOME: ") +" TEL; HOME: ". Length ());} Be.settelephone (home); String email = ""; Pattern P4 = Pattern.compile ("\\w+ (\\.\\w+) *@\\w+ (\\.\\w+) +"); Matcher m4 = P4.matcher (str), while (M4.find ()) {email = m4.group (0);} Be.setemail (email); Addressbeans.add (BE);} Reader.close ();} catch (Exception e) {e.printstacktrace ();} return Addressbeans;} public static string nextline (BufferedReader reader) throws IOException {string line; String Nextline;do {line = Reader.readline (), if (line = = null) {return NULL,}} while (line.length () = = 0), while (LINE.ENDSW ITH ("=")) {line = line.substring (0, Line.length () – 1); line + = Reader.readline ();} Reader.mark (+); nextline = Reader.readline (); if (nextline! = null) && (nextline.length () > 0) && (( Nextline.charat (0) = = 0x20) | | (Nextline.charat (0) = = 0x09))) {line + = nextline.substring (1);} else {reader.reset ();} line = Line.trim (); return line;} /* decode */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! =) {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], + int l = character.digit (char) bytes[++i], () 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 "";}} /* * Encode */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] >= '! ') && (enc Ode[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]));//extract Chinese characters 16 The last two bits of the binary byte, that is, the two bits after the =e8 equals sign,//Three Represents a Chinese character Char C16_6;char c16_7;if (S16.charat (6) >= && S16.charat (6) <= 122) {c16_6 = (char) (S16.charat (6)-32);} else {c16_6 = S16.charat (6);} if (S16.charat (7) >= && S16.charat (7) <= 122) {c16_7 = (char) (S16.charat (7)-+);} else {c16_7 = s16.ch Arat (7);} Sb.append ("=" + C16_6 + c16_7);}}} return sb.tostring ();}}
Package Com.yfli.entity;public class Addressbean {private string truename;private string Mobile;private string Workmobile;private string Telephone;private string Email;public string Gettruename () {return truename;} public void Settruename (String truename) {this.truename = Truename;} Public String Getmobile () {return mobile;} public void Setmobile (String mobile) {this.mobile = mobile;} Public String Getworkmobile () {return workmobile;} public void Setworkmobile (String workmobile) {this.workmobile = Workmobile;} Public String Gettelephone () {return telephone;} public void Settelephone (String telephone) {this.telephone = telephone;} Public String Getemail () {return email;} public void Setemail (String email) {this.email = email;}}
Java parsing vcf format file import and Export