是否可以将数据库文件复制到SD卡?

时间:2011-10-12 18:36:59

标签: java android database save sd-card

我的Android手机上有一个数据库,我需要将信息输入SD卡。

是否可以将数据库文件保存在可读状态的SD卡上?我无法找到有关如何执行此操作的任何信息。

将数据库文件复制到SD卡的一些源代码是理想的。

2 个答案:

答案 0 :(得分:2)

数据库文件就像任何其他文件一样,如果您制作二进制文件副本,它将起作用。

Java没有内置文件复制方法,因此您可以使用:

Standard concise way to copy a file in Java?

请不要忘记添加您的清单权限以写入SD卡:
Permission to write to the SD card

答案 1 :(得分:0)

这是我在SO上与其他几个用户混淆的脚本。看起来你可以告诉android在哪里存储文件,但是当你使用adb shell进入手机时,你可能很难找到它!

此代码(我在操作栏中映射到临时按钮以进行调试)将打印如下内容:"数据库保存到:/storage/emulated/0/DB-DEBUG/todotable.db" ,但是进入我手机上的shell我实际上找到了我的数据库:" / storage / emulated / legacy / DB-DEBUG /" ...不确定是什么,但是现在我可以用sqlite浏览器查看我的数据库了!

//db will reside in: /storage/emulated/legacy/DB_DEBUG
private void copyDatabase(Context c, String DATABASE_NAME) {
    String databasePath = c.getDatabasePath(DATABASE_NAME).getPath();
    File f = new File(databasePath);
    OutputStream myOutput = null;
    InputStream myInput = null;
    Log.d("testing", " testing db path " + databasePath);
    Log.d("testing", " testing db exist " + f.exists());

    if (f.exists()) {
        try {
            File directory = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/DB-DEBUG");
            if (!directory.exists()){
                directory.mkdir();
            }

            String copyPath = directory.getAbsolutePath() + "/" + DATABASE_NAME;
            myOutput = new FileOutputStream(copyPath);
            myInput = new FileInputStream(databasePath);

            byte[] buffer = new byte[1024];
            int length;
            while ((length = myInput.read(buffer)) > 0) {
                myOutput.write(buffer, 0, length);
            }

            myOutput.flush();
            Toast.makeText(getBaseContext(), "Your database copied to: " + copyPath, Toast.LENGTH_LONG).show();
            Log.d("testing", " database saved to: " + copyPath);

        } catch (Exception e) {
            Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_LONG).show();

        } finally {
            try {
                if (myOutput != null) {
                    myOutput.close();
                    myOutput = null;
                }
                if (myInput != null) {
                    myInput.close();
                    myInput = null;
                }
            } catch (Exception e) {
                Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_LONG).show();
            }
        }
    }
}