android开发:SD卡,Assets目录,data/data目录下,数据库的复制操作

来源:互联网 发布:石头纹理算法 编辑:程序博客网 时间:2024/05/20 15:40

工具类,可以直接放在项目中使用

实现SD卡,Assets目录,data/data目录下,数据库的复制

import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.List;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.util.Log;/** * SD卡,Assets目录,data/data目录下,数据库的复制操作 * */public class DBUtil {private static final String TAG = DBUtil.class.getSimpleName();/** * 是否存在SYS_DB_NAME * */public static boolean dbExists(Context context) {File file = context.getDatabasePath(Constant.SYS_DB_NAME);return file.exists();}/** * 导入SYS_DB_NAME * */public static void importDatabase(Context context) throws IOException {File file = context.getDatabasePath(Constant.SYS_DB_NAME);if (!file.getParentFile().exists()) {file.getParentFile().mkdirs();}file.createNewFile();InputStream is = context.getAssets().open(Constant.SYS_DB_NAME);OutputStream os = new FileOutputStream(file);byte[] buffer = new byte[1024 * 10];int len = -1;while ((len = is.read(buffer)) != -1) {os.write(buffer, 0, len);}is.close();os.close();}/** * 从SD卡导入数据库 * */public static List<String> importSDcardDB(Context context)throws IOException {List<String> result = new ArrayList<String>();// 打开文件/mnt/sdcard/项目目录/databasesFile dir = new File(android.os.Environment.getExternalStorageDirectory()+ File.separator+ context.getResources().getString(R.string.app_name)+ File.separator + Constant.DB_PATH);File codelibDBFile = new File(dir, Constant.SYS_DB_NAME);File userDBFile = new File(dir, DBHelper.DATABASE_NAME);// 判断是否存在文件目录,不存在则创建if (codelibDBFile.exists()) {copyDB(context, codelibDBFile,context.getDatabasePath(Constant.SYS_DB_NAME));} else {result.add(Constant.SYS_DB_NAME);}if (userDBFile.exists()) {copyDB(context, userDBFile,context.getDatabasePath(DBHelper.DATABASE_NAME));} else {result.add(DBHelper.DATABASE_NAME);}return result;}/** * 向SD卡导出数据库 * */public static void exportSDcardDB(Context context) throws IOException {// 获取扩展存储设备的文件目录File SDFile = android.os.Environment.getExternalStorageDirectory();// 打开文件目录File toDir = new File(SDFile.getPath() + File.separator+ context.getResources().getString(R.string.app_name)+ File.separator + Constant.DB_PATH);// 判断是否存在文件目录,不存在则创建if (!toDir.exists()) {toDir.mkdirs();}if (toDir.exists()) {// 存在文件目录 copyDB(context, context.getDatabasePath(DBHelper.DATABASE_NAME),new File(toDir, DBHelper.DATABASE_NAME));}}/** * 复制数据库 * */private static void copyDB(Context context, File fromDB, File toDB)throws IOException {// 判断是否存在文件if (toDB.exists()) {// 已经存在文件toDB.delete();}// 创建新的dbSQLiteDatabase s = SQLiteDatabase.openOrCreateDatabase(toDB, null);// // 复制asseets中的db文件// InputStream myInput = context.getAssets().open(Constant.SYS_DB_NAME);InputStream myInput = new FileInputStream(fromDB);String outFileName = toDB.getPath();OutputStream myOutput = new FileOutputStream(outFileName);byte[] buffer = new byte[1024];int length;while ((length = myInput.read(buffer)) > 0) {myOutput.write(buffer, 0, length);}myOutput.flush();myOutput.close();myInput.close();s.close();}}

0 0
原创粉丝点击