本文原创,转载爬虫请保留原文地址:http://maosidiaoxian.iteye.com/blog/1488067

android中数据存储方式主要有四种,即SharePreferences,Sqlite3,文件和ContentProvider。所以要对本程序的数据进行备份,其实也就是把这些数据文件拷贝到另外的目录,在恢复时再拷贝回来。
以下以我的一个程序为例,其中使用了SharePreferences及sqlite3两个数据存储的方法。在备份时将其拷到SD卡,恢复时再拷贝回来。由于对文件流的操作在这里不是我应该关注的地方,于是直接用了apache开源项目commons中的IO包里的FileUtils类的方法。
在使用过程中,发现直接复制到手机中结果是操作失败,不知道是不是我权限没有添加上。不过复制到SD卡上却是成功的。
下面的ApkInfo及ResourceUtil是我自己封装的,顾名思义,里面包含程序的图标、包名、程序名等等一系列信息,所在的包放在了google code(http://code.google.com/p/cfuture-androidkit/)有sourceforge(http://sourceforge.net/projects/cf-androidkit/files/)中。
备份与恢复的代码如下:
/* * @(#)Backup.java       Project:UniversityTimetable * Date:2012-4-16 * * Copyright (c) 2011 CFuture09, Institute of Software,  * Guangdong Ocean University, Zhanjiang, GuangDong, China. * All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); *  you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package com.lurencun.cfuture09.universityTimetable.backup.util;import java.io.File;import java.io.IOException;import org.apache.commons.io.FileUtils;import android.content.Context;import android.os.Environment;import android.widget.Toast;import com.sinaapp.msdxblog.androidkit.util.ResourceUtil;import com.sinaapp.msdxblog.androidkit.util.entity.ApkInfo;/** * @author Geek_Soledad (66704238@51uc.com) */public class Backup {private String SHARED_PREFS;private String DATABASES;private String APP_PATH;private Context mContext;private String BACKUP_PATH;private String BACKUP_DATABASES;private String BACKUP_SHARED_PREFS;public Backup(Context context) {mContext = context;ApkInfo apkInfo = new ResourceUtil(context).getApkInfo();APP_PATH = new StringBuilder("/data/data/").append(apkInfo.packageName).toString();SHARED_PREFS = APP_PATH + "/shared_prefs";DATABASES = APP_PATH + "/databases";if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {BACKUP_PATH = "/sdcard/lurencun/backup";} else {BACKUP_PATH = "/com.lurencun/backup/";Toast.makeText(mContext, "没有检测到SD卡,可能无法备份成功", Toast.LENGTH_SHORT).show();}BACKUP_PATH += apkInfo.packageName;BACKUP_DATABASES = BACKUP_PATH + "/database";BACKUP_SHARED_PREFS = BACKUP_PATH + "/shared_prefs";}/** * 备份文件 *  * @return 当且仅当数据库及配置文件都备份成功时返回true。 */public boolean doBackup() {return backupDB() && backupSharePrefs();}private boolean backupDB() {return copyDir(DATABASES, BACKUP_DATABASES, "备份数据库文件成功:"+ BACKUP_DATABASES, "备份数据库文件失败");}private boolean backupSharePrefs() {return copyDir(DATABASES, BACKUP_DATABASES, "备份配置文件成功:"+ BACKUP_SHARED_PREFS, "备份配置文件失败");}/** * 恢复 *  * @return 当且仅当数据库及配置文件都恢复成功时返回true。 */public boolean doRestore() {return restoreDB() && restoreSharePrefs();}private boolean restoreDB() {return copyDir(BACKUP_DATABASES, DATABASES, "恢复数据库文件成功", "恢复数据库文件失败");}private boolean restoreSharePrefs() {return copyDir(BACKUP_SHARED_PREFS, SHARED_PREFS, "恢复配置文件成功","恢复配置文件失败");}private final void showToast(String msg) {Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();}/** * 复制目录 *  * @param srcDir *            源目录 * @param destDir *            目标目录 * @param successMsg *            复制成功的提示语 * @param failedMsg *            复制失败的提示语 * @return 当复制成功时返回true, 否则返回false。 */private final boolean copyDir(String srcDir, String destDir,String successMsg, String failedMsg) {try {FileUtils.copyDirectory(new File(srcDir), new File(destDir));} catch (IOException e) {e.printStackTrace();showToast(failedMsg);return false;}showToast(successMsg);return true;}}

更多相关文章

  1. Android之Android(安卓)Studio JNI
  2. ubuntu14.04下搭建Android编译环境
  3. Android完全退出程序退出所有Activity
  4. Android(安卓)安全攻防
  5. cocos2dx在windows下开发,编译到android上(1)
  6. 关于android中的内部存储与外部存储
  7. 【Monkey】Android(安卓)Monkey autotest Tools
  8. Android(安卓)NDK开发详细介绍
  9. Android应用程序开发(第三版)-课后习题解答

随机推荐

  1. Android Studio编码问题
  2. Flutter初探--在Android原生中引入Flutte
  3. Android 超简易Zxing框架 生成二维码+扫
  4. 爱踢门之锤子自由截屏快捷键配置(中)
  5. 【Android开发问题集】布局加载器异常的
  6. Android多模块构建合并aar解决方案
  7. Android 基础总结:(十一)ContentResolver与C
  8. Android 开发:gen already exists but is
  9. Android文章博客收藏
  10. AndServer,一个Android端的web服务器