如何将数据库从Asset文件夹复制到Databases文件夹
问题的出现原因:
在使用数据库时,如果数据库文件不存在,需要从assets文件夹中复制数据库文件到Databases文件夹中,否则将无法操作数据库。
解决方法:
1. 修改DatabaseHandler类中的createDataBase()方法,代码如下:
public void createDataBase() throws IOException { //如果数据库文件不存在,则从assets文件夹中复制数据库文件 boolean mDataBaseExist = checkDataBase(); if(!mDataBaseExist) { this.getReadableDatabase(); this.close(); try { //复制数据库文件 copyDataBase(); System.out.println("createDatabase database created"); } catch (IOException mIOException) { throw new Error("ErrorCopyingDataBase"); } } }
2. 添加checkDataBase()方法,代码如下:
private boolean checkDataBase() { File dbFile = new File(DB_PATH + DB_NAME); return dbFile.exists(); }
3. 添加copyDataBase()方法,代码如下:
private void copyDataBase() throws IOException { InputStream mInput = mContext.getAssets().open(DB_NAME); String outFileName = DB_PATH + DB_NAME; OutputStream mOutput = new FileOutputStream(outFileName); byte[] mBuffer = new byte[1024]; int mLength; while ((mLength = mInput.read(mBuffer))>0) { mOutput.write(mBuffer, 0, mLength); } mOutput.flush(); mOutput.close(); mInput.close(); }
4. 在DatabaseHandler的构造方法中初始化DB_PATH变量,代码如下:
DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
5. 调用createDataBase()方法来复制数据库文件,代码如下:
DatabaseHandler db = new DatabaseHandler(context); try { db.createDataBase(); } catch (IOException io) { throw new Error("Unable to create database"); }
以上就是从Asset文件夹复制数据库文件到Databases文件夹的解决方法。