android开发:SD卡,Assets目录,data/data目录下,数据库的复制操作
2014-09-30 14:52
603 查看
工具类,可以直接放在项目中使用
实现SD卡,Assets目录,data/data目录下,数据库的复制
实现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(); } }
相关文章推荐
- Android 开发之如何优雅地复制Assets文件到SD卡
- android从assets目录复制到sd卡
- android中使用sqlite、复制assets下的数据库到SD卡、支持大于1M的文件
- android从assets目录复制到sd卡
- Android开发之获取assets文件夹中的数据库内容并写入到SD卡中
- Android中对assets目录下数据库操作
- Android 开发之如何优雅地复制Assets文件到SD卡
- android中使用sqlite、复制assets下的数据库到SD卡、支持大于1M的文件
- android从assets目录复制文件到sd卡
- android中使用sqlite、复制assets下的数据库到SD卡、支持大于1M的文件
- 将android工程中assets中的文本文件复制到指定的SD卡目录中
- Android复制Assets目录下的文件到/data/data目录
- Mac下开发Android,数据库等操作
- 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式,并把SQLite的数据库文件存储在SD卡中!!!
- Android复制Assets中大于1M的Zip压缩包,并解压到SD卡中
- Android开发之SD卡上文件操作
- android复制数据库到SD卡
- Android开发12——Andorid中操作数据库的insert的两种方法以及nullColumnHack
- 使用android快速开发框架afinal的FinalDb操作android数据库
- Android开发—数据库应用—使用数据库(SQLite)--查看模拟器目录