public class BackupTask extends AsyncTask{private static final String COMMAND_BACKUP = "backupDatabase";public static final String COMMAND_RESTORE = "restroeDatabase";privateContext mContext;publicBackupTask(Context context) {this.mContext =context;
}
@OverrideprotectedInteger doInBackground(String... params) {//TODO Auto-generated method stub//获得正在使用的数据库路径,我的是 sdcard 目录下的 /dlion/db_dlion.db
// 默认路径是 /data/data/(包名)/databases/*.db
File dbFile =mContext.getDatabasePath(Environment
.getExternalStorageDirectory().getAbsolutePath()+ "/dlion/db_dlion.db");
File exportDir= newFile(Environment.getExternalStorageDirectory(),"dlionBackup");if (!exportDir.exists()) {
exportDir.mkdirs();
}
File backup= newFile(exportDir, dbFile.getName());
String command= params[0];if(command.equals(COMMAND_BACKUP)) {try{
backup.createNewFile();
fileCopy(dbFile, backup);return Log.d("backup", "ok");
}catch(Exception e) {//TODO: handle exception
e.printStackTrace();return Log.d("backup", "fail");
}
}else if(command.equals(COMMAND_RESTORE)) {try{
fileCopy(backup, dbFile);return Log.d("restore", "success");
}catch(Exception e) {//TODO: handle exception
e.printStackTrace();return Log.d("restore", "fail");
}
}else{return null;
}
}private void fileCopy(File dbFile, File backup) throwsIOException {//TODO Auto-generated method stub
FileChannel inChannel = newFileInputStream(dbFile).getChannel();
FileChannel outChannel= newFileOutputStream(backup).getChannel();try{
inChannel.transferTo(0, inChannel.size(), outChannel);
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}finally{if (inChannel != null) {
inChannel.close();
}if (outChannel != null) {
outChannel.close();
}
}
}
}