如何将dbsqlite文件从资产复制到实际设备中的app目录中

时间:2016-03-17 10:11:47

标签: android android-sqlite sqliteopenhelper greendao

我已经创建了所有数据库,并且正在使用模拟器,因此使用Android设备监视器可以轻松注入数据库。

但在实际设备中,我必须以编程方式将其从Assets文件夹复制到app目录。我使用了很多代码和类,但是我失败了。 看起来有些代码会复制数据库文件,但文件仍为空。

请建议我将数据库文件从资产复制到设备中的代码,其中包含数据文件中保存在资源文件夹中的所有数据。

这里我正在使用这个文件\

 import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;

public class AssetDatabaseOpenHelper {

    private static final String DB_NAME = "urdu.sqlite";

    private Context context;

    public AssetDatabaseOpenHelper(Context context) {
        this.context = context;
    }

    public SQLiteDatabase openDatabase() {
        File dbFile = context.getDatabasePath(DB_NAME);

        if (!dbFile.exists()) {
            try {
                SQLiteDatabase checkDB = context.openOrCreateDatabase(DB_NAME, context.MODE_PRIVATE, null);
                if(checkDB != null){

                    checkDB.close();

                }
                copyDatabase(dbFile);
            } catch (IOException e) {
                throw new RuntimeException("Error creating source database", e);
            }
        }

        return SQLiteDatabase.openDatabase(dbFile.getPath(), null, SQLiteDatabase.OPEN_READONLY);
    }
    private void copyDatabase(File dbFile) throws IOException {
        InputStream is = context.getAssets().open(DB_NAME);
        OutputStream os = new FileOutputStream(dbFile);

        byte[] buffer = new byte[1024];
        while (is.read(buffer) > 0) {
            os.write(buffer);
        }

        os.flush();
        os.close();
        is.close();
    }

}

请告诉我我做错了什么,以及为什么没有使用app目录中的文件复制数据。它总是空的。请帮我。

  

注意:我使用的是绿色Dao。

1 个答案:

答案 0 :(得分:0)

使用如下路径将其保存在您的设备中

    String your_package_name="give your package name here";
    String DB_PATH = "/data/data/"+your_package_name"+/databases/"; 

String outFileName = DB_PATH + copyas;

        OutputStream myOutput = new FileOutputStream(outFileName);

这可能会对你有帮助。