这个可以在每次应用开启时检测database文件夹下是否有这个名称的数据库,如果没有就从asserts中获得释放一次,给你看一下我的代码:
我的asserts里有一个文件叫做:address.db
/***在onCreate()方法中调用
*/
private File initDatabase (){
BufferedInputStream bis = null
BufferedOutputStream bos = null
File file = getDatabasePath("address.db")
byte [] buffer = new byte[1024]
int c
try {
if (!file.exists())
file.getParentFile().mkdirs()
else
return file
bis = new BufferedInputStream(getAssets().open("address.db"))
bos = new BufferedOutputStream(new FileOutputStream(file))
while ((c = bis.read(buffer)) != -1)
bos.write(buffer, 0, c)
} catch (IOException e) {
e.printStackTrace()
return null
}finally{
try {
if (bis != null)
bis.close()
if (bos != null) {
bos.close()
bos.flush()
}
}catch (IOException e){
e.printStackTrace()
}
}
return file
}
assets资源目录一般用于存放html文件、数据库文件、javascript文件,assets目录下的文件不会在R.java自动生成ID,所以读取assets目录下的文件必须指定文件的路径
在代码中使用AssertManager获取文件的输入流读取
AssetManager assetManager = context.getAssets()try {
InputStream is = assetManager.open("json.data")
BufferedReader br = new BufferedReader(new InputStreamReader(is))
StringBuffer stringBuffer = new StringBuffer()
String str = null
while((str = br.readLine())!=null){
stringBuffer.append(str)
}
} catch (IOException e) {
e.printStackTrace()
}
也可以把json文件放在res的raw目录下
res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;
但是需要注意的是assets允许有目录结构,而raw不行
读取方法大同小异
try {InputStream is = getResources().openRawResource(R.id.file)
BufferedReader br = new BufferedReader(new InputStreamReader(is))
StringBuffer stringBuffer = new StringBuffer()
String str = null
while((str = br.readLine())!=null){
stringBuffer.append(str)
}
} catch (IOException e) {
e.printStackTrace()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)