Android中加载数据库到data/data下的当前包中

public class DBManager
{
    private final int BUFFER_SIZE = 400000;
    private static final String PACKAGE_NAME = "com.city.list.main";
    private static final String DB_NAME = "china_province_city_zone.db";
    private static final String DB_PATH = "/data" + Environment.getDataDirectory().getAbsolutePath() + "/" + PACKAGE_NAME; // 存放路径
    private Context mContext;
    private SQLiteDatabase database;

    public DBManager(Context context)
    {
        this.mContext = context;
    }

    /**
     * 被调用方法
     */
    public void openDateBase()
    {
        this.database = this.openDateBase(DB_PATH + "/" + DB_NAME);

    }

    /**
     * 打开数据库
     * 
     * @param dbFile
     * @return SQLiteDatabase
     * @author sy
     */
    private SQLiteDatabase openDateBase(String dbFile)
    {
        File file = new File(dbFile);
        if (!file.exists())
        {
            //// 打开raw中得数据库文件,获得stream流
            InputStream stream = this.mContext.getResources().openRawResource(R.raw.china_province_city_zone);
            try
            {
                
                //将获取到的stream 流写入道data中
                FileOutputStream outputStream = new FileOutputStream(dbFile);
                byte[] buffer = new byte[BUFFER_SIZE];
                int count = 0;
                while ((count = stream.read(buffer)) > 0)
                {
                    outputStream.write(buffer, 0, count);
                }
                outputStream.close();
                stream.close();
                SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbFile, null);
                return db;
            } catch (FileNotFoundException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return database;
    }

    public void closeDatabase()
    {
        this.database.close();
    }
}

一个工具类,可以直接把raw文件下的db数据库写入到data下。

原文地址:https://www.cnblogs.com/sy171822716/p/2800775.html