Android:将资产sqlite数据库复制到数据库控制器时出错

Android:将资产sqlite数据库复制到数据库控制器时出错,android,database,file,copy,fileoutputstream,Android,Database,File,Copy,Fileoutputstream,我想在我的应用程序中使用预填充数据库,因此我找到了此代码 DB_NAME = "urg1718.sqlite" public SQLiteDatabase openDatabase() { File dbFile = context.getDatabasePath(DB_NAME); String path = dbFile.getAbsolutePath(); Log.i("path", "openDatabase: " + path); if (!dbFi

我想在我的应用程序中使用预填充数据库,因此我找到了此代码

DB_NAME = "urg1718.sqlite"

public SQLiteDatabase openDatabase() {
    File dbFile = context.getDatabasePath(DB_NAME);
    String path = dbFile.getAbsolutePath();
    Log.i("path", "openDatabase: " + path);

    if (!dbFile.exists()) {
        try {
            //the file doesn't exist yet so this function is called
            copyDatabase(dbFile);
        } catch (IOException e) {
            throw new RuntimeException("Error creating source database", e);
        }
    }
    //check if the database is present in the folder
    Log.i("database", "openDatabase: " + dbFile.exists());

    return SQLiteDatabase.openDatabase(dbFile.getPath(), null, SQLiteDatabase.OPEN_READONLY);
}

private void copyDatabase(File dbFile) throws IOException {
    //pre fil database
    InputStream is = context.getAssets().open(DB_NAME);
    try {
        //where the error occurs
        OutputStream os = new FileOutputStream(dbFile);

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

        os.flush();
        os.close();
        is.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();;
    } catch (IOException e) {
        e.printStackTrace();
    }

}
“OutputStream os=new FileOutputStream”捕获以下错误

java.io.FileNotFoundException: /data/data/jle.urgdegarde17_18/databases/urg1718: open failed: ENOENT (No such file or directory) W/System.err: at libcore.io.IoBridge.open(IoBridge.java:456) W/System.err: at java.io.FileOutputStream.(FileOutputStream.java:87) W/System.err: at java.io.FileOutputStream.(FileOutputStream.java:127) W/System.err: at java.io.FileOutputStream.(FileOutputStream.java:116) W/System.err: at jle.urgdegarde17_18.AssetDatabaseOpenHelper.copyDatabase(AssetDatabaseOpenHelper.java:49) W/System.err: at jle.urgdegarde17_18.AssetDatabaseOpenHelper.openDatabase(AssetDatabaseOpenHelper.java:35) W/System.err: at jle.urgdegarde17_18.Chargement.isStoragePermissionGranted(Chargement.java:40) W/System.err: at jle.urgdegarde17_18.Chargement.onCreate(Chargement.java:18) W/System.err: at android.app.Activity.performCreate(Activity.java:5990) W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) W/System.err: at android.app.ActivityThread.access$800(ActivityThread.java:151) W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102) W/System.err: at android.os.Looper.loop(Looper.java:135) W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5254) W/System.err: at java.lang.reflect.Method.invoke(Native Method) W/System.err: at java.lang.reflect.Method.invoke(Method.java:372) W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) W/System.err: Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory) W/System.err: at libcore.io.Posix.open(Native Method) W/System.err: at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186) W/System.err: at libcore.io.IoBridge.open(IoBridge.java:442) W/System.err: ... 20 more java.io.FileNotFoundException:/data/data/jle.urgdegarde17_18/databases/urg1718:open failed:enoint(没有这样的文件或目录) W/System.err:at libcore.io.IoBridge.open(IoBridge.java:456) W/System.err:at java.io.FileOutputStream.(FileOutputStream.java:87) W/System.err:at java.io.FileOutputStream.(FileOutputStream.java:127) W/System.err:at java.io.FileOutputStream.(FileOutputStream.java:116) W/System.err:jle.urgdegarde17_18.AssetDatabaseOpenHelper.copyDatabase(AssetDatabaseOpenHelper.java:49) W/System.err:jle.urgdegarde17_18.AssetDatabaseOpenHelper.openDatabase(AssetDatabaseOpenHelper.java:35) W/System.err:在jle.urgdegarde17_18.Chargement.IsStorage许可已授予(Chargement.java:40) W/System.err:jle.urgdegarde17_18.Chargement.onCreate(Chargement.java:18) W/System.err:at-android.app.Activity.performCreate(Activity.java:5990) W/System.err:at-android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) W/System.err:at-android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) W/System.err:at-android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) W/System.err:android.app.ActivityThread.access$800(ActivityThread.java:151) W/System.err:at-android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) W/System.err:at-android.os.Handler.dispatchMessage(Handler.java:102) W/System.err:at-android.os.Looper.loop(Looper.java:135) W/System.err:at-android.app.ActivityThread.main(ActivityThread.java:5254) W/System.err:at java.lang.reflect.Method.invoke(本机方法) W/System.err:at java.lang.reflect.Method.invoke(Method.java:372) W/System.err:com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) W/System.err:com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) W/System.err:原因:android.System.ErrnoException:打开失败:enoint(没有这样的文件或目录) W/System.err:at libcore.io.Posix.open(本机方法) W/System.err:at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186) W/System.err:at libcore.io.IoBridge.open(IoBridge.java:442) W/System.err:。。。20多 我尝试使用getDatabasePath()、getDatabasePath().getAbsolutePath()并直接将这些函数返回的字符串放入FileOutputStream

getDatabasePath(), getDatabasePath().getAbsolutePath() FileOutputStream 我还试图从数据库名称中删除“.sqlite”

我不明白我做错了什么


谢谢。

请参考此感谢,朋友!!!非常感谢你的朋友!!!