我想在一个Android应用程序中备份我的sqlite数据库,并可以使用以下方法复制它:
"/data/data/ws.rtin.android.birthdates/databases/database"
收件人:
"/data/data/ws.rtin.android.birthdates/databases/database_bak"
,一切正常。但是Android Studio说:
请勿对/ data /进行硬编码,而应使用context.getfilesdir()。getpath()
但是context.getfilesdir().getpath()
返回
“ / data / user / 0 / ws.rtin.android.birthdates / files”
或者,如果我使用getDatabasePath(DB_NAME).getPath()
它返回
“ / data / user / 0 / ws.rtin.android.birthdates / databases / Database”
两者都是错误的(而且我的数据库名称是database
而不是Database
)。此外,this.getDatabasePath()
,Context.getDatabasePath()
和getApplicationContext.getDatabasePath()
返回所有相同的错误路径。
我已经在AVM和华为Mate 10 pro上进行了尝试。两者都不起作用。下面的源正在工作:
try {
InputStream is = new FileInputStream("/data/data/ws.rtin.android.birthdates/databases/database");
OutputStream os = new FileOutputStream("/data/data/ws.rtin.android.birthdates/databases/database_bak");
byte[] buff = new byte[1024];
int len;
while ((len = is.read(buff)) > 0) {
os.write(buff, 0, len);
}
is.close();
os.close();
Toast.makeText(this, this.getResources().getString(R.string.Database_Saved), Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Toast.makeText(this, this.getResources().getString(R.string.Failed), Toast.LENGTH_SHORT).show();
}
我期望getDatabasePath(DB_NAME).getPath()
返回正确的路径,但是现在我不确定,因为对路径进行硬编码会在以后的android-api中引起麻烦,我不知道如何处理。