我的應用程序將數據庫從/ data/data複製到外部存儲到一個子目錄中。運作良好,但過了一段時間後,它不再工作。Android/Java:將數據庫從/ data/data複製到sdcard |錯誤:沒有這樣的文件或目錄
我也試過Stericson的RootTools庫,但也有同樣的錯誤。
錯誤消息:
Executing: cp -fp /data/data/file.db /storage/emulated/0/Folder/19700820_135043.db
[ 08-20 13:50:43.559 1959: 2206 D/Command ]
ID: 0, cp: /storage/emulated/0/Folder/19700820_135043.db: No such file or directory
以下權限是在manifest.xml文件:
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.ACCESS_SUPERUSER
奇怪的事情是:
- 首先,它的工作原理
- 一段時間後此錯誤出現
- 如果SD卡上的文件夾內容被刪除,它會再次運行!
我的代碼是:
private class Async extends AsyncTask<Void, Void, Void> {
homedir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Folder/";
Fhomedir = new File(homedir);
datadir = Environment.getDataDirectory().getAbsolutePath();
sourcefile = "settings.db";
homefile = "backup_" + currentDateandTime + ".db";
sourcedir = datadir + "/data/com.android.providers.settings/databases/" + sourcefile;
@Override
protected void onPreExecute() {
super.onPreExecute();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
String currentDateandTime = sdf.format(new Date());
homefile = "backup_" + currentDateandTime + ".db";
try {
File file = new File(homedir, String.valueOf(System.currentTimeMillis() + ".txt"));
Runtime.getRuntime().exec("logcat -d -v long -f " + file.getAbsolutePath());
}
catch (IOException e){
e.printStackTrace();
}
Fhomedir = new File(homedir);
if(!Fhomedir.exists()){
Fhomedir.mkdirs();
}
dialog.show();
}
@Override
protected Void doInBackground(Void... voids) {
if(RootTools.isAccessGiven()){
Log.e("ROOTACCESS", "TRUE");
}
else Log.e("ROOTACCESS", "FALSE");
if(RootTools.remount(homedir, "rw")) {
if (isExternalStorageWritable()) {
//RootTools.copyFile(sourcedir, homedir + homefile, true, true);
FileUtils.copyToDirectory(sourcedir, homedir + homefile);
//exportDB();
}
else Toast.makeText(mContext, "Can't write to SDCARD", Toast.LENGTH_LONG).show();
}
else Toast.makeText(mContext, "Can't write to SDCARD", Toast.LENGTH_LONG).show();
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
Intent update = new Intent("com.flextrick.UPDATE");
mContext.sendBroadcast(update);
dialog.dismiss();
File homefilex = new File(homedir + homefile);
if(homefilex.exists()){
Toast.makeText(mContext, resources.getString(R.string.success_saved), Toast.LENGTH_LONG).show();
}
else Toast.makeText(mContext, resources.getString(R.string.failed), Toast.LENGTH_LONG).show();
}
}
這是根植設備嗎?將數據庫歸於應用程序?每個應用程序都可以使用幾行代碼將數據庫文件複製到外部或可移動媒體,而無需root權限。 – greenapps
是的,它的根源。不,我需要將其他應用程序的數據庫複製到設備的存儲空間 – user3853024
您可以開始撰寫您的文章,說明所有這些。 – greenapps