Android:检查文件是否是有效的SQLite数据库

Rhy*_*arh 4 database sqlite android

我需要检查文件(扩展名未知)是否是有效的SQLite数据库.db文件存储在SD卡上.我需要在我的应用程序中导入数据库.但是,如果用户使用与具有任何扩展名的数据库相同的名称创建文件,则代码仍会接受该文件,因为它仅搜索名称.有没有快速方法来检查存储在存储卡上的sqlite数据库的有效性.我使用了这段代码,但它仍然接受与db同名的任意文件.

String path = Environment.getExternalStorageDirectory().getPath() + "/FOLDER/DB_FILE";

        SQLiteDatabase database;
        database = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY);
        if (database == null) {
            Toast.makeText(getApplicationContext(), "Error: Incorrect/Corrupted File", Toast.LENGTH_SHORT).show();
            return;
        } else {Proceed with code here}
Run Code Online (Sandbox Code Playgroud)

Dri*_*rti 6

SQLite数据库文件包含一个提供一些有用信息的标头.特别是,每个SQlite数据库文件始终在其前16个字节中的值为:SQLite格式3\0000

因此,您可以检查您的文件是否包含前16个字节中的值:

public boolean isValidSQLite(String dbPath) {
    File file = new File(dbPath);

    if (!file.exists() || !file.canRead()) {
        return false;
    }

    try {
        FileReader fr = new FileReader(file);
        char[] buffer = new char[16];

        fr.read(buffer, 0, 16);
        String str = String.valueOf(buffer);
        fr.close();

        return str.equals("SQLite format 3\u0000");

    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)