无法将数据库从assets文件夹复制到外部存储

时间:2014-04-26 22:25:14

标签: android

我使用以下代码将数据库从assets文件夹复制到外部存储:

private void copyDataBase(String dbPath){
    try{
        InputStream assestDB = context.getAssets().open("databases/"+dbName);
        OutputStream appDB = new FileOutputStream(dbPath,false);

        byte[] buffer = new byte[1024];
        int length;
        while ((length = assestDB.read(buffer)) > 0) {
            appDB.write(buffer, 0, length);
        }

        appDB.flush();
        appDB.close();
        assestDB.close();
    }catch(IOException e){
        e.printStackTrace();
    }

}

我正在手机上尝试,发生的事情是复制了2048个字节,之后没有任何内容被复制(我的文件大约是13KB)。我做错了什么?

2 个答案:

答案 0 :(得分:1)

我认为这不会导致你的问题,但是' -1'错误时返回,而不是' 0'。文档意味着' 0' 0永远不应该归还,但它可能是可能的。您可以尝试更改该行:

while ((length = assestDB.read(buffer)) > 0) {

为:

while ((length = assestDB.read(buffer)) != -1) {

看看是否有帮助。

您获得某些输出的事实使您不太可能拥有权限(Android或文件系统)违规。

答案 1 :(得分:0)

首先,确保您在清单中设置了WRITE_EXTERNAL_STORAGE权限。然后,查看使用context.openFileOutput(String, int)Environtment作为所需的文件目录。

Android培训指南提供了有关如何正确读取和写入文件的良好文档。

http://developer.android.com/training/basics/data-storage/files.html