zoukankan      html  css  js  c++  java
  • 手机通讯录恢复

    前段时间我哥备份手机通讯录备份的是xls表格格式,然后如今导入不进去了,用各种软件都是错误。

    我导出为vcard的(后缀是vcf),以文本格式打开看了下。发现vcard是非常有格式规范的。顿时认为有戏了。能够尝试将excel表格转换成vcard格式。然后导入。

    BEGIN:VCARD
    N:;移动客服;;;;;;
    TEL;CELL:10086
    STARRED:False
    UID:514
    VERSION:3.0
    REV:20140602
    END:VCARD

    非常明显的格式,第二行就是姓名。tel那一行就是号码。

    而保存的那个表格格式例如以下:

    中国移动 10086  
    中国联通   10010

    这种话,事实上就非常easy了。仅仅要把vcf格式里面的姓名和号码填充一下就能够了,而那个UID我则直接给的是循环数。

    大体思路有了,再给实现。

    1.读取xls,直接用的是非常老的jxl包。如今貌似已经不更新了。而一開始用这个操作表格的时候,提示Unable to recognize OLE stream。度娘告诉我,这是由于:

    你是用什么2007 ? jxl眼下停止更新了。不能读写 excel2007
    
    假设你要读写就用 apache POI ,几乎相同的使用方法支持  2003、2007 网上有非常多实例。
    无语,然后直接用wps打开xls。另存为老版本号的xls。ok。

    2。jxl的语法,

    參考这篇

    jxl操作表格基础语法

    3,buffer写文件

    这部分能够參看网络上非常多东西。


    jxl.jar的百度网盘连接:戳我下载


    直接给出代码吧,

    类名:Oper.java

    package core;
    
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    
    import jxl.Cell;
    import jxl.Sheet;
    import jxl.Workbook;
    import jxl.read.biff.BiffException;
    
    public class Oper {
    	void test(){
    		BufferedWriter out;
    		try {
    			out = new BufferedWriter(new FileWriter(new File("res/test.txt")));
    			out.write("hello"+"
    "+"hello");
    			out.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    	
    	void work(){
    		try {
    			Workbook book=Workbook.getWorkbook(new File("res/3.xls"));
    			BufferedWriter out=new BufferedWriter(new FileWriter(new File("res/out.vcf")));
    			//get the first sheet
    			Sheet sheet=book.getSheet(0);
    			for(int i=0;i<231;i++){
    				Cell cell1=sheet.getCell(0,i);
    				String name=cell1.getContents();
    				Cell cell2=sheet.getCell(1,i);
    				String phone1=cell2.getContents();
    				Cell cell3=sheet.getCell(2,i);
    				String phone2=cell3.getContents();
    				String phone;
    				if(phone1.equals(""))phone=phone2;else phone=phone1;
    				out.write("BEGIN:VCARD
    "+"N:;"+name+";;;;;;
    "+"TEL;CELL:"+phone+"
    UID:"+i+"
    "+"VERSION:3.0
    REV:20140602
    END:VCARD
    ");
    				out.write(name);
    				
    			}
    			out.close();
    			book.close();
    		} catch (BiffException | IOException e) {
    			System.out.println("not find");
    			e.printStackTrace();
    		}
    		
    	}
    	public static void main(String[] args) {
    		new Oper().work();
    	}
    }
    


    我已经用wps查看过了。有231行数据,所以循环了231次。


    读入的文件在project文件夹下/res/3.xls,输出是/res/out.vcf.然后,通过各种手机助手就行导入文件夹了。


  • 相关阅读:
    《Unity3D-设置子弹发射的代码》
    《Unity3D-控制角色受伤的时候身体颜色变化的代码》
    《Unity3D-鼠标控制游戏人物的方向的代码》
    C++基础学习笔记001
    C++学习笔记
    JSON中使用jsonmapper解析的代码和步骤 学习笔记
    JSON学习笔记
    FileInfo文件的一些操作代码
    UDPClient的服务端和客户端的通信代码
    TCPListener和TCPClient之间的通信代码
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/6929052.html
Copyright © 2011-2022 走看看