如何读取android asserts下面已经存在的sqlite数据库

如何读取android asserts下面已经存在的sqlite数据库,第1张

这个可以在每次应用开启时检测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()

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9391212.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存