您的位置:首页 > 移动开发 > Android开发

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

2014-09-30 14:52 603 查看
工具类,可以直接放在项目中使用

实现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/项目目录/databases
File 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();
}
// 创建新的db
SQLiteDatabase 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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: