这是将文件保存到内存的安全正确方法吗?

时间:2011-10-25 17:57:26

标签: android memory save

我一直在使用以下代码,但直觉上我发现它不太安全。它能在每台设备上完美运行吗?此代码在第一个应用程序运行中将我的主数据库(100 kB)复制到内部存储器。谢谢你的时间。

private void CopyDBtoInternal() {

    String path = "/data/data/com.myproject/databases/";
    String DB_DESTINATION = "/data/data/com.myproject/databases/sample.db";

    // Check if the database exists before copying
    boolean initialiseDatabase = (new File(DB_DESTINATION)).exists();
    if (initialiseDatabase == false) {

        //create folders
        File db_folder = new File(path);
        db_folder.mkdirs();

        AssetManager assetManager = getApplicationContext().getAssets();

        try {
            InputStream is = assetManager.open("sample.db");

            // Copy the database into the destination
            OutputStream os = new FileOutputStream(DB_DESTINATION);
            byte[] buffer = new byte[1024];
            int length;
            while ((length = is.read(buffer)) > 0){
                os.write(buffer, 0, length);
            }
            os.flush();

            os.close();
            is.close();

        } catch (IOException e) {
            e.printStackTrace();
            AlertDialog.Builder dialogo = new AlertDialog.Builder(AppGuiaDeBulas.this);
            dialogo.setTitle("Alerta");
            dialogo.setMessage("It was not possible to save database. Error #001");
            dialogo.setNeutralButton("OK", null);
            dialogo.show();
        }
    }

}

1 个答案:

答案 0 :(得分:1)

Check out this part of the article on writing to storage.

如果您使用的是API级别8(Froyo)或更高版本,请使用getExternalFilesDir()打开一个文件,该文件代表应保存文件的外部存储目录。此方法采用type参数指定所需的子目录类型,例如DIRECTORY_MUSIC和DIRECTORY_RINGTONES(传递null以接收应用程序文件目录的根目录)。如有必要,此方法将创建适当的目录。通过指定目录类型,您可以确保Android的媒体扫描程序可以正确地对系统中的文件进行分类(例如,铃声被识别为铃声而不是音乐)。如果用户卸载了您的应用程序,该目录及其所有内容将被删除。

如果您使用的是API级别7或更低级别,请使用getExternalStorageDirectory()打开代表外部存储根目录的文件。然后,您应该将数据写入以下目录:

/ Android设备/数据文件// / 这是您的Java样式包名称,例如“com.example.android.app”。如果用户的设备运行的是API级别8或更高级别并且他们卸载了您的应用程序,则该目录及其所有内容将被删除。

http://developer.android.com/guide/topics/data/data-storage.html#AccessingExtFiles