Android數據庫備份類

nnkde 9年前發布 | 1K 次閱讀 Java Android

/**

  • Android數據庫備份類 */ public class BackupTask extends AsyncTask<String, Void, Integer> implements

     CompletionListener {
    
    

    // 定義常量 public static final int BACKUP_SUCCESS = 1; public static final int RESTORE_SUCCESS = 2; public static final int BACKUP_ERROR = 3; public static final int RESTORE_NOFLEERROR = 4; public static final String COMMAND_BACKUP = "backupDatabase"; public static final String COMMAND_RESTORE = "restroeDatabase"; private Context mContext;

    public BackupTask(Context context) {

     this.mContext = context;
    

    }

    @Override protected Integer doInBackground(String... params) {

     // 1,獲得數據庫路徑
     File dbFile = mContext.getDatabasePath("xxx.db");
     // 2,創建保存的數據庫的路徑
     File exportDir = new File(Environment.getExternalStorageDirectory(),
             "shopBackup");
     if (!exportDir.exists()) {
         exportDir.mkdirs();
     }
     File backup = new File(exportDir, dbFile.getName());
     // 3,檢查操作
     String command = params[0];
     if (command.equals(COMMAND_BACKUP)) {
         // 復制文件
         try {
             backup.createNewFile();
             fileCopy(dbFile, backup);
             return BACKUP_SUCCESS;
         } catch (IOException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
             return BACKUP_ERROR;
         }
     } else {
         return BACKUP_ERROR;
     }
    
    

    }

    private void fileCopy(File source, File dest) throws IOException {

     FileChannel inChannel = new FileInputStream(source).getChannel();
     FileChannel outChannel = new FileOutputStream(dest).getChannel();
     // FileInputStream fis = new FileInputStream(dbFile);
     // FileOutputStream fos = new FileOutputStream(backup);
     // byte buffer[] = new byte[4 * 1024];
     // while(fis.read(buffer) != -1){
     // fos.write(buffer);
     // }
     // fos.flush();
     //
     long size = inChannel.size();
     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();
         }
     }
    

    }

    @Override protected void onPostExecute(Integer result) {

     // TODO Auto-generated method stub
     super.onPostExecute(result);
     switch (result) {
     case BACKUP_SUCCESS:
         onBackupComplete();
         break;
    
     default:
         break;
     }
    

    }

    @Override public void onBackupComplete() {

     Log.d("backup", "ok");
    
    

    }

    @Override public void onRestoreComplete() {

     // TODO Auto-generated method stub
    
    

    }

    @Override public void onError(int errorCode) {

     // TODO Auto-generated method stub
    
    

    }

}</pre>

 本文由用戶 nnkde 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!