基本思想:用FileInputStream 读取数据库,再用FileOutputStream 把读到的数据库写入到那个目录。
代码实现:
package cn.edu.bztc.happyidiom.db;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;
import android.util.Log;
import cn.edu.bztc.happyidiom.R;
public class DBOpenHelper {
private final int BUFFER_SIZE = 400000;
private static final String DB_NAME = "idiom.db";
public static final String PACKAGE_NAME = "cn.edu.bztc.happyidiom";
public static final String DB_PATH = "/data"
+ Environment.getDataDirectory().getAbsolutePath() + "/"
+ PACKAGE_NAME + "/databases";
private Context context;
public DBOpenHelper(Context context) {
this.context = context;
}
public SQLiteDatabase openDatabase(){
try{
File myDataPath =new File(DB_PATH);
if(!myDataPath.exists()){
myDataPath.mkdirs();
}
String dbfile=myDataPath+"/"+DB_NAME;
if(!(new File(dbfile).exists())){
InputStream is=context.getResources().openRawResource(R.raw.idioms);
FileOutputStream fos=new FileOutputStream(dbfile);
byte[] buffer=new byte[BUFFER_SIZE];
int count=0;
while((count=is.read(buffer))>0){
fos.write(buffer, 0, count);
}
fos.close();
is.close();
}
SQLiteDatabase db=SQLiteDatabase.openOrCreateDatabase(dbfile, null);
return db;
}catch(FileNotFoundException e){
Log.e("Database", "File not found");
e.printStackTrace();
}catch (IOException e) {
// TODO: handle exception
Log.e("Database", "IO exception");
e.printStackTrace();
}
return null;
}
}
写完代码后,还要测试有没有复制成功?
先要搭建测试环境:
在AndroidManifest,xml中加入下面代码:
<uses-library android:name="android.test.runner" />
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="cn.edu.bztc.happyidiom">
</instrumentation>
<span style="font-size:18px;">创建测试类:</span>
<span style="font-size:18px;"> </span><pre name="code" class="java">package cn.edu.bztc.happyidiom.test;
import cn.edu.bztc.happyidiom.db.DBOpenHelper;
import android.test.AndroidTestCase;
public class DBOpenHelperTest extends AndroidTestCase {
public void testDBCopy() {
DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext());
dbOpenHelper.openDatabase();
}
}