繁体   English   中英

将数据库复制到sdcard(如果存在)

[英]Copy database to sdcard if exists

如果数据库文件存在,如何将其复制到sdcard中? 这是我的代码:

public boolean checkdatabase() {
        boolean checkdb = false;
        try {
            File databaseFile = myContext.getDatabasePath("database.db");
            checkdb = databaseFile.exists();
        } catch(SQLiteException e) {
            System.out.println("Database doesn't exist");
        }
        return checkdb;
    }

    public void opendatabase() {
        boolean dbexist = checkdatabase();
        if (dbexist) {
            myDatabase = SQLiteDatabase.openDatabase("data/data/***/databases/database.db", null, SQLiteDatabase.OPEN_READWRITE);
        } else {
            createdatabase();
            System.out.println("Database doesn't exist");
            myDatabase = SQLiteDatabase.openDatabase("data/data/***/databases/database.db", null, SQLiteDatabase.OPEN_READWRITE);
        }
    }

    private copydatabase() throws IOException {
            String DB_PATH = "data/data/***/databases/";
            File f = new File(DB_PATH);
            if (!f.exists()) {
            f.mkdir();
            }
            String DATABASE_NAME = "database.db";
            InputStream myInput = myContext.getAssets().open(DATABASE_NAME);
            String outFileName = DB_PATH + DATABASE_NAME;
            OutputStream myOutput = new FileOutputStream(outFileName);
            byte[] buffer = new byte[1024];
            int length;
            while ((length = myInput.read(buffer)) > 0) {
                myOutput.write(buffer, 0, length);
            }

            myOutput.flush();
            myOutput.close();
            myInput.close();
        }

此代码将数据库复制到内部存储器。 我想检查外部存储器(sdcard)是否存在,以及它是否为真-将数据库文件复制到其中,然后在我的应用程序中的任何位置访问它。

尝试这个 :

try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath = "//data//{package name}//databases//{database name}";
            String backupDBPath = "{database name}";
            File currentDB = new File(data, currentDBPath);
            File backupDB = new File(sd, backupDBPath);

            if (currentDB.exists()) {
                FileChannel src = new FileInputStream(currentDB).getChannel();
                FileChannel bst = new FileOutputStream(backupDB).getChannel();
                bst.transferFrom(src, 0, src.size());
                src.close();
                bst.close();
            }
        }
    } catch (Exception e) {
    }

别忘了在清单文件中包含以下内容:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

这样的事情应该起作用:

String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED)){
    File root = Environment.getExternalStorageDirectory();

    String DATABASE_NAME = "database.db";
    File destination = new File(root, "nameofthefile");

    try{
        InputStream myInput = myContext.getAssets().open(DATABASE_NAME);
        FileOutputStream myOutput = new FileOutputStream(destination);
        //Handle writing
    }catch(Exception e){ //Change it for appropiate catches
        // Handle exceptions
    }finally{
        myOutput.flush();
        myOutput.close();
        myInput.close();
    }
}else{
    // No SD card or only reading permissions
}

请记住,您需要在AndroidManifest.xml中进行声明:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM