我一直在使用以下代码,但直觉上我发现它不太安全。它能在每台设备上完美运行吗?此代码在第一个应用程序运行中将我的主数据库(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();
}
}
}
答案 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