拷贝释放数据库文件到系统目录四种方式并在主线程显示土司

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);

// 拷贝释放数据库文件到系统目录.
new Thread() {
public void run() {
try {

File file = new File(getFilesDir(), "address.db");
if (file.exists() && file.length() > 0) {
Log.i(TAG, "数据库已经存在无需拷贝");
} else {
InputStream is = getAssets().open("address.db");
// data/data/包名/files/address.db
FileOutputStream fos = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = is.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
fos.close();
is.close();
showToastInMainThread("拷贝数据库成功");
}
} catch (Exception e) {
e.printStackTrace();
showToastInMainThread("拷贝数据库失败");
}

};
}.start();

}

/**
* 在主线程显示土司
*
* @param text
*/
public void showToastInMainThread(final String text) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), text, 1).show();

}
});
}

资源文件使用的几种常见办法:
1.把资源放在SD卡上. 程序初始化的时候 连接服务器 把资源文件下载到SD卡上.(地图应用, mp3学英语)(中国常用)

2.javase类加载器 把address.db文件放置在src目录下,加载的时候自动加载到classes目录下
InputStream is = getClassLoader().getResourceAsStream("address.db");
//拷贝文件 释放到系统/data/data/包名/files/address.db


3.资源目录 raw目录
InputStream is = getResources().openRawResource(R.raw.address);
//拷贝文件 释放到系统/data/data/包名/files/address.db

4.资产目录(案例用)
InputStream is = getAssets().open("address.db");
//拷贝文件 释放到系统/data/data/包名/files/address.db

原文地址:https://www.cnblogs.com/bravolove/p/4988128.html