Android Sqlite数据库相关——实现将 Sqlite 数据库复制到SD 卡

时间:2022-09-18 22:59:54
  1. 确定 sqlite 数据库所在位置(一般在data/data/com.pagename/databases/ 下,其中 com.pagename为当前项目包名)
  2. 确定 sqlite 数据库名称,拼接到数据库位置后面(例如:data/data/com.pagename/databases/user.db)
  3. 指定 SD 卡路径,用于接收 sqlite 文件(例如: Environment.getExternalStorageDirectory() + File.separator +"user.db")
  4. 实现文件复制方法,执行复制

定义复制参数

private void copyDBToSDcrad() {
    String DATABASE_NAME = "user.db";

    String oldPath = "data/data/com.pagename/databases/" + DATABASE_NAME;
    String newPath = Environment.getExternalStorageDirectory() + File.separator + DATABASE_NAME;

    copyFile(oldPath, newPath);
}

 

文件复制方法

/**
 * 复制单个文件
 *
 * @param oldPath String 原文件路径
 * @param newPath String 复制后路径
 * @return boolean
 */
public static void copyFile(String oldPath, String newPath) {
    try {
        int bytesum = 0;
        int byteread = 0;
        File oldfile = new File(oldPath);
        File newfile = new File(newPath);
        if (!newfile.exists()) {
            newfile.createNewFile();
        }
        if (oldfile.exists()) { // 文件存在时
            InputStream inStream = new FileInputStream(oldPath); // 读入原文件
            FileOutputStream fs = new FileOutputStream(newPath);
            byte[] buffer = new byte[1444];
            while ((byteread = inStream.read(buffer)) != -1) {
                bytesum += byteread; // 字节数 文件大小
                fs.write(buffer, 0, byteread);
            }
            inStream.close();
        }
    } catch (Exception e) {
        System.out.println("复制单个文件操作出错");
        e.printStackTrace();

    }

}