三星手机导入来的文件是xml格式,小米手机不是xml格式。具体来讲,三星手机导出的联系人信息和短息都是xml格式的,而小米手机的联系人导出是vcf格式,短息导出的是csv格式,因此如果你把三星手机的备份导入小米时会遇到一些问题。网上有一些转换软件,大多都是exe文件,我一般不喜欢直接执行未知的exe文件,尤其是为了导入手机联系人,去执行一个未知的可执行文件,风险比较大。因此我选择了自己编码,把xml文件转成小米识别的vcf格式和csv格式文件。
当然需要使用工具把三星手机中的数据导出备份出来,转换后再用小米应用把数据导入到小米手机中。闲话少叙,直接贴代码过来,只要你会使用java编程,你就可以做到。
过程中遇到转换后的文件,导入小米时出现乱码的情况,这时需要用Nodepad++把vcf文件转成以UTF-8无BOM格式编码,再导入就不会出现乱码了。
代码中用到了logger输出日志,你可以用别的方式输出日志比如system.out.println,或者不输出,把其删除;输出数据内容的类是DebugLog,该类也是自己编写的一个类,你可以使用别的方式输出数据,因此这个需要自己编写,如果需要的话我把它放在了附件里,可以参考。
* @Description:采用DOM解析XML文件
* 三星手机I9128v导出电话和短信,导出文件格式为xml格式,
* 导入到小米4手机中,格式为vcf格式
* 三星电话联系人xml文件内容:
* <Contacts>
* <Contact>
* <Name>妈</Name>
* <Starred>0</Starred>
* <PhoneList>
* <Phone Type="2">12345678901</Phone>
* </PhoneList>
* <Account value="0">
* <Name>vnd.sec.contact.phone</Name>
* <Type>vnd.sec.contact.phone</Type>
* </Account>
* <GroupList>
* <GroupName>家人</GroupName>
* </GroupList>
* </Contact>
* </Contacts>
* 小米4电话联系人vcf格式:
* BEGIN:VCARD
* VERSION:3.0
* N:朱;锦松;;;
* FN:朱锦松
* TEL;TYPE=CELL:12345678901 //手机
* TEL;TYPE=CELL:222 //手机
* TEL;TYPE=WORK:025999999 //工作
* TEL;TYPE=HOME:222 //家庭
* TEL;TYPE=PREF:025666666 //总机
* TEL;TYPE=VOICE:222 //其他
* END:VCARD
*
*/
package dom;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class DomXML {
private Logger logger;
private DebugLog exportor;
public DomXML() {
exportor = DebugLog.getSharedLog();
logger = LoggerFactory.getLogger(DomXML.class);
}
//转vcf格式,转后要用Notepad++转为UTF-8无BOM格式文件,才能导入到小米手机联系人中
</