加载外部文件的几种常见做法:
1. 放在assets目录下
InputStream is = am.open("address.db"); 不会对该文件生成id
2. 放在res目录下的raw目录下.
InputStream is =getResources().openRawResource(R.raw.address);
编译这个文件生成id
3. javase做法
InputStream is = getClassLoader().getResourceAsStream("address.db");
4. 联网下载.
地图应用. 高德导航. 1G 10G
mp3学英语
游戏应用的素材资源 联网下载
1. 放在assets目录下
InputStream is = am.open("address.db"); 不会对该文件生成id
2. 放在res目录下的raw目录下.
InputStream is =getResources().openRawResource(R.raw.address);
编译这个文件生成id
3. javase做法
InputStream is = getClassLoader().getResourceAsStream("address.db");
4. 联网下载.
地图应用. 高德导航. 1G 10G
mp3学英语
游戏应用的素材资源 联网下载
-----------------------------------------------------------------------------
1.将数据库文件放到assets目录下
2.在splashActivity创建时判断系统目录下是否有该文件,如果没有则复制到系统目录下
/**
* 子线程中弹出土司跟新 ui
* @author Administrator
*
*/
public class ToastUtils
{
public static void showToastInThread( final Activity
context, final String msg){
//在子线程里面更新 ui
context.runOnUiThread( new Runnable()
{
@Override
public void run()
{
Toast. makeText(context, msg, 0).show();
}
}); //线程的join
}
}
---------------------------------------------------------
2.在splashActivity创建时判断系统目录下是否有该文件,如果没有则复制到系统目录下
/**
* 拷贝号码地址数据库到手机目录下
*/
private void copyAddressDb()
{
File file= new File(getFilesDir(), "address.db");
if(file.exists()&&file.length()>0){
return;
}
new Thread(){
public void run()
{
//得到assets目录下address.db对应输入流
AssetManager am = getAssets();
try {
InputStream is = am.open( "address.db");
File file= new File(getFilesDir(), "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();
//在子线程中跟新 ui
ToastUtils. showToastInThread(SplashActivity.this,"拷贝数据库成功...");
} catch (IOException
e) {
e.printStackTrace();
//在子线程中跟新 ui
ToastUtils. showToastInThread(SplashActivity.this,"拷贝数据库失败...");
}
};
}.start();
}