无法将SQLite数据库从资产复制到另一个区域

时间:2018-06-22 08:55:54

标签: java android libgdx

由于某些原因,我无法将软件的SQLite数据库从“ asset”文件夹复制到其他目标位置。使用我正在使用的“ copyDatabaseFromAssets()”方法,它只会生成一个空文件。我确实整理了以下代码,以使我可以更轻松地找到错误消息。

由于我的想法不高,I used an old article from ReignDesign.com稍微调整了数据库文件。我也碰巧使用的是2016版的SQLDroid,看起来确实可以正常工作。

该文件位于“〜/ assets / database / test.db”中。

这是我正在使用的基本代码:

public class AndroidLauncher extends AndroidApplication {

    @Override
    protected void onCreate ( Bundle savedInstanceState ) {

        super.onCreate( savedInstanceState );

        copyDatabaseFromAssets( this, "test.db", true );

    }


    /**
     * Copy database file from assets folder inside the apk to the system database path.
     * @param context Context
     * @param databaseName Database file name inside assets folder
     * @param overwrite True to rewrite on the database if exists
     * @return True if the database have copied successfully or if the database already exists without overwrite, false otherwise.
     */
    private boolean copyDatabaseFromAssets( Context context, String databaseName, boolean overwrite )  {

        File outputFile = context.getDatabasePath( databaseName );


        if ( outputFile.exists() && !overwrite ) {

            return true;

        }

        outputFile = context.getDatabasePath( databaseName + ".temp" );
        outputFile.getParentFile().mkdirs();


        try {

            InputStream inputStream = context.getAssets().open( databaseName );
            OutputStream outputStream = new FileOutputStream( outputFile );


            // transfer bytes from the input stream into the output stream
            byte[] buffer = new byte[ 1024 ];
            int length;

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

                outputStream.write( buffer, 0, length );

            }

            // Close the streams
            outputStream.flush();
            outputStream.close();
            inputStream.close();

            outputFile.renameTo( context.getDatabasePath( databaseName ) );

        } catch ( IOException e ) {

            if ( outputFile.exists() ) {

                outputFile.delete();

            }

            return false;

        }

        return true;

    }


}

谢谢。

1 个答案:

答案 0 :(得分:1)

您的db文件位于子文件夹内,从子文件夹获取文件的更好方法就是更改此行

InputStream inputStream = context.getAssets().open( databaseName );

收件人:

InputStream inputStream = context.getAssets().open("database/" + databaseName);

希望它将对您有帮助!