-2

アプリケーションのエクスポート/インポート機能を実行できるように、アプリケーションから SQLite データベースをエクスポートしようとしています。

ここここの例を使用して、 SQLite データベース (/data/data/com.example.worldcountriesbooks/databases/group.db)を Android デバイス (Samsung Galaxy Note)、Android 4.0.3からエクスポートしようとしていますが、私はこのエラーが発生し続けます

12-14 00:56:33.722: I/Failed(14850): java.io.FileNotFoundException: /data/data/com.example.worldcountriesbooks/databases/group.db: open failed: ENOENT (No such file or directory)

WRITE_EXTERNAL_STORAGE&をマニフェスト ファイルに追加しようとしWRITE_MEDIA_STORAGEましたが、機能しません。ルート化されているため、Android デバイス上の実際のファイルを参照できますが、アプリケーションで読み取ることができません。理由はありますか?

サンプルコード:

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

        if (sd.canWrite()) {
            String currentDBPath = "//data//com.example.worldcountriesbooks/databases//group.db";
            String backupDBPath = "//mnt//sdcard//database.db";
            File currentDB = new File(data, currentDBPath);
            File backupDB = new File(sd, backupDBPath);

            FileChannel src = new FileInputStream(currentDB).getChannel();
            FileChannel dst = new FileOutputStream(backupDB).getChannel();
            dst.transferFrom(src, 0, src.size());
            src.close();
            dst.close();
            Toast.makeText(getBaseContext(), backupDB.toString(),
                    Toast.LENGTH_LONG).show();

        }
    } catch (Exception e) {

        Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG)
                .show();
    }
4

1 に答える 1

1

ファイルが内部メモリにある場合、アプリは内部メモリの特別なフォルダからのみ読み取ることができます。そのフォルダーへのパスは、次のように返されます。

getFilesDir().getAbsolutePath()

あなたの場合、それは次のようになります:

String path= this.getFilesDir().getAbsolutePath() + File.separator + "databases" + File.separator + "group.db";

で読めますopenFileInput()

より詳しい情報:

http://developer.android.com/guide/topics/data/data-storage.html#files内部

于 2012-12-13T17:06:08.087 に答える