如何在android中将数据库写入文本文件

Sri*_*Rao 6 java sqlite android

我正在为我的大学项目目的开发一个间谍应用程序.为此,我已记录设备的呼叫,位置和SMS并将其存储在数据库中.现在我想将数据库的内容导出到文本文件..我尝试了下面的代码.

private void readAndWriteCallsData() {

    File dataBaseFile = getDatabasePath("DATABASE"); 

    File callDataFile = new File(Environment.getDataDirectory()+"/data/com.example.myapp/databases/"+"DATABASE");

    try {

        BufferedReader dbFileReader = new BufferedReader(new FileReader(callDataFile));

        String eachLine;

        while((eachLine = dbFileReader.readLine()) != null)
        {

                Callslog.append(eachLine);
                Callslog.append("\n");

        }

    } catch (IOException e) {

        e.printStackTrace();
    }


}
Run Code Online (Sandbox Code Playgroud)

但那不行......请帮帮我......

Joh*_*ohn 2

您可以通过 Base64 将数据库文件从二进制流编码为字符流,然后在需要时解码文本。

首先找到一个Base64库。您可以使用http://sourceforge.net/projects/iharder/files/base64/。只有一个文件“Base64.java”。

代码示例:

private void readAndWriteCallsData() {
    File callDataFile = new File(Environment.getDataDirectory()+"/data/com.example.myapp/databases/"+"DATABASE");
    try {
        FileInputStream fis = new FileInputStream(callDataFile);
        try{
            byte[] buf = new byte[512];
            int len;
            while((len = fis.read(buf)) > 0){
                String text = Base64.encodeBytes(buf, 0, len); // encode binary to text
                Callslog.append(text);
                Callslog.append("\n");
            }
        }finally{
            fis.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

要恢复它,请使用如下代码:

private void revertCallsData() {
    File encodedCallDataFile; // get reference to the encoded text file
    try {
        BufferedReader br = new BufferedReader(new FileReader(encodedCallDataFile));
        try{
            String line;
            while((line = br.readLine()) != null){
                byte[] bin = Base64.decode(line); // decode each line to binary, you can get the original database file
            }
        }finally{
            br.close();
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)