当前位置:编程学习 > wap >>

ios版qq聊天记录的导出

我所使用的平台:

Mac OS X Lion 10.7.2

 


用到一些东西:

0。iExplorer.app

用于将保存这聊天数据的 sqlite 数据库文件导出到电脑里面,

该数据库的所在位置为(模糊掉的是qq号):

 \


 

将这个db文件导出到电脑里面,然后修改后缀为 .sqlite

之前试的时候我也不知道这个 .db 文件就是修改了后缀名的 sqlite 数据库文件。

但一想到 ios 平台里面的数据库也差不多就 sqlite 了,便改后缀试试运气,果不其然~

说到这点要鄙视一下 ios qq 开发组的粗心大意啊,如果我来做的话,

会把保存着聊天记录的 sqlite 数据库文件至少用个除 db 外的其他后缀吧?db太惹眼了。

或者是将数据库文件伪装成声音文件,每次作修改之后都不对数据库文件的 lastModified 属性做修改,

我想,再要找出这个数据库文件的话,那难度上就要增大很多~

 


1。FireFox 的 SqliteManager 插件

SqilteManager 主要用于将导出到电脑里面的  sqlite 数据库文件解析出来,

不知道是 sqlite 本身的局限,还是因为其他的原因,

我发现 sqlite 里面的数据好像都是明文的,难道不能做一做加密处理?

再一次鄙视一下ios 版 qq 的开发者~

如上,明文的啊,一切都简单化了啊,上张图看一下数据表里面的聊天记录吧:

 \


 

点 Actions 下拉列表,选择 “Save Result(CSV) to File” 即可将感兴趣的聊天记录导出为 csv 文件。

csv 文件可由  excel 打开,不过有点儿问题,打开之后发现里面的内容全部都是乱码,

对 excel 不是很熟悉,不知道哪里能够调整字符编码,所以就不纠结在这个问题上面了。

ok,既然不能指望 excel 了,那么祭出程序猿的看家本领,用  java 来弄吧

 


2。opencsv

在网上找了一些资料,发现了java 解析 csv 文件的一个开源框架——opencsv

sourceforge.net 上面能够下载 到 2进制 jar 包,到时候在编写解析程序的时候要用到。

 


3。eclipse

回归老本行,直接上代码:

[java] package org.bruce.vertices.extra.csv; 
 
import java.io.File; 
import java.io.FileReader; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.List; 
 
import au.com.bytecode.opencsv.CSVReader; 
 
/**
 * @author Bruce Yang
 * 在用 SQLiteManager 将聊天记录表保存为 csv 文件的时候,使用如下的 SQL 查询:
 * select uin,time,content from tb_message where uin=123456(你所感兴趣的qq号码)~
 * 生成的txt三行为一个单元,第一行是qq号码,第二行是消息发出的时间,第三行是消息内容,
 * 单元与单元之间用空行做分隔~
 */ 
public class TestOpenCSV { 
     
    /**
     * @param csvPath
     * @return
     * @throws Exception
     */ 
    public static List<String[]> getLines(String csvPath) throws Exception { 
        File f = new File(csvPath); 
        if(!f.exists()) { 
            System.out.println("文件不存在~"); 
            return null; 
        } 
        CSVReader csvReader = new CSVReader(new FileReader(f)); 
        List<String[]> lines = csvReader.readAll(); 
        csvReader.close(); 
        return lines; 
    } 
     
    /**
     * @param args
     * @throws Exception
     */ 
    public static void main(String[] args) throws Exception { 
        List<String[]> result = getLines("/Users/user/Desktop/output.csv"); 
        if(result == null) { 
            System.err.println("目标 csv 文件的路径无效,请查证~"); 
        } 
         
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
        for(int i = 0; i < result.size(); ++ i) { 
            String[] item = result.get(i); 
            for(int j = 0; j < item.length; ++ j) { 
                if(j == 0) { 
                    System.out.println("QQ号:" + item[j]); 
                } else if(j == 1) { 
                    // 将时间的格式转换地漂亮一点(竟然将最后三位截除了,得追加回来)~  
                    long time = Long.parseLong(item[j] + "000"); 
                    Date date = new Date(time); 
                    System.out.println("时间: " + sdf.format(date)); 
                } else if(j == 2) { 
                    System.out.println("消息:“" + item[j].trim() + '”'); 
                } 
            } 
            System.out.println(); 
        } 
    } 

package org.bruce.vertices.extra.csv;

import java.io.File;
import java.io.FileReader;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import au.com.bytecode.opencsv.CSVReader;

/**
 * @author Bruce Yang
 * 在用 SQLiteManager 将聊天记录表保存为 csv 文件的时候,使用如下的 SQL 查询:
 * select uin,time,content from tb_message where uin=123456(你所感兴趣的qq号码)~
 * 生成的txt三行为一个单元,第一行是qq号码,第二行是消息发出的时间,第三行是消息内容,
 * 单元与单元之间用空行做分隔~
 */
public class TestOpenCSV {
 
 /**
  * @param csvPath
  * @return
  * @throws Exception
  */
 public static List<String[]> getLines(String csvPath) throws Exception {
  Fi

补充:移动开发 , 其他 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,