android实现本程序数据的备份与恢复 分类: Android数据存储 2014-06-20 13:58 61人阅读 评论(0) 收藏
2014-06-20 13:58
836 查看
本文原创,转载爬虫请保留原文地址: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;
}
}
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;
}
}
相关文章推荐
- [ZZ]android sqllite数… 分类: Android数据存储 2014-05-30 10:58 61人阅读 评论(0) 收藏
- Android创建和使用数据库详… 分类: Android数据存储 2014-05-30 10:58 82人阅读 评论(0) 收藏
- 处理Android SQLite -&n… 分类: Android数据存储 2014-05-30 10:58 95人阅读 评论(0) 收藏
- Android将SQLite数据表导出到csv格式文件 分类: Android数据存储 2014-06-20 13:28 85人阅读 评论(0) 收藏
- android 数据库 备份还原 分类: Android数据存储 2014-06-20 14:01 75人阅读 评论(0) 收藏
- android创建数据库(SQLite)保存图片示例ZZ 分类: Android数据存储 2015-03-22 09:58 41人阅读 评论(0) 收藏
- android中的数据库操作ZZ 分类: Android数据存储 2014-05-30 10:58 88人阅读 评论(0) 收藏
- android listview与sqlite数… 分类: Android数据存储 2014-05-30 10:58 67人阅读 评论(0) 收藏
- android 数据库目录 SD卡 分类: Android数据存储 2014-06-20 14:31 83人阅读 评论(0) 收藏
- Android创建和使用数据库详… 分类: Android数据存储 2014-05-30 10:58 71人阅读 评论(0) 收藏
- Android 判断SD卡是否存在及容量查询 分类: Android数据存储 2014-06-20 13:32 66人阅读 评论(0) 收藏
- android屏幕页面实现滚动,页面跳… 分类: Android开发 2014-05-30 10:58 58人阅读 评论(0) 收藏
- Android 保存图片到SQLite,读出SQLite中的图片 分类: Android数据存储 2015-03-22 09:59 39人阅读 评论(0) 收藏
- SQLiteOpenHelper数据库创建与升级onCreat()、onUpgrade() 分类: Android数据存储 2015-03-24 17:40 34人阅读 评论(0) 收藏
- Android程序进行混淆,在导出签名a… 分类: Android开发 2014-05-30 10:58 47人阅读 评论(0) 收藏
- JAVA实现CRC16算法 分类: Android JAVA 2015-03-30 18:58 48人阅读 评论(0) 收藏
- Android数据库Cursor操作:I… 分类: Android数据存储 2014-05-30 10:58 70人阅读 评论(0) 收藏
- python apply的一点知识 分类: python基础学习 2013-12-11 13:58 875人阅读 评论(0) 收藏
- 痛苦并幸福着------源动力第一天 分类: 程序人生 2013-11-04 21:58 898人阅读 评论(0) 收藏
- Android数据库 之 SQLite数据库zz 分类: Android开发 2014-05-30 10:58 81人阅读 评论(0) 收藏