【问题标题】:How to copy /data/data files to /sdcard?如何将 /data/data 文件复制到 /sdcard?
【发布时间】:2013-02-24 19:41:16
【问题描述】:

我的APP需要root权限才能做一些分析,所以我在代码中写成

"Runtime.getRuntime().exec("su");",然后写入linux命令或shell脚本。

我试图将 /data/data/packagename/databases/webview.db 文件复制到 /sdcard/test (源数据库文件是我手机中存在的所有应用程序数据文件,虽然 java 代码我只能获取我的应用程序本身的文件),

然后做一些分析。但问题是,源文件名是一样的,如果我用的话

cp -r /data/data/*/webview.db /sdcard/test

目标目录下总是只有一个文件,我不太擅长linux shell

命令,所以我想知道如何复制到目标目录并更改文件名或只是

保持源目录结构,如 /sdcard/test/package/webview.db 。我是中国人,我的

英文不太好,希望你能看懂,谢谢!

【问题讨论】:

标签: android linux shell


【解决方案1】:

我正在使用此代码,它运行良好!

    public void copyDbToSdcard() {
        try {
            File sd = Environment.getExternalStorageDirectory();
            File data = Environment.getDataDirectory();

            if (sd.canWrite()) {
                String currentDBPath = "//data//" + this.getPackageName()
                        + "//databases//db";
                String backupDBPath = Environment.getExternalStorageDirectory()
                        .toString() + "/Darama1/db";
                File currentDB = new File(data, currentDBPath);
                File backupDB = new File(sd, backupDBPath);

                if (currentDB.exists()) {
                    FileChannel src = new FileInputStream(currentDB)
                            .getChannel();
                    FileChannel dst = new FileOutputStream(backupDB)
                            .getChannel();
                    dst.transferFrom(src, 0, src.size());
                    src.close();
                    dst.close();
                }
            }
        } catch (Exception e) {
        }
    }

【讨论】:

  • 但这只能获取我APP本身的数据库文件,我需要的是获取我手机中所有名为webview.db的数据库文件。我认为它需要linux命令中的root权限而不是只是在java代码中。
  • 我正在尝试使用您的代码,但它在这一行显示多个标记 - 未处理的异常类型 FileNotFoundException - 资源泄漏:'' is never closed...... at new FileInputStream(currentDB)
【解决方案2】:

你可以使用 adb。

USB 连接设备后

你跑:

adb -s YOURDEVICE pull /data/data/packagename/databases/webview.db

了解您的设备是什么

你跑:

adb 设备

这样您的桌面上就有了 webview.db 文件,您可以随意使用它

【讨论】:

  • 但是我想在我的Android APP中使用linux命令,我的意思是我的APP需要root权限来做上面的事情,所以我在我的代码中写了“Runtime.getRuntime().exec(” su");" ,然后写linux命令或者shell脚本进去。可能我没有具体描述,抱歉。
猜你喜欢
  • 1970-01-01
  • 2015-01-18
  • 1970-01-01
  • 1970-01-01
  • 2014-09-09
  • 1970-01-01
  • 2011-07-12
  • 1970-01-01
  • 2012-05-30
相关资源
最近更新 更多