从资产文件夹加载数据库 - Fileoutputstream失败

时间:2014-05-15 10:01:23

标签: android assets fileoutputstream

我的问题是,当数据库从资产文件夹复制到电话路径时,我的应用程序总是失败:

/data/data/at.atn.android/databases/

我的数据库名称:

atnRoutenplaner.sqlite3

我的传输代码:

private void copyDataBase() throws IOException{

    //Open your local db as the input stream
    InputStream myInput = myContext.getAssets().open(DB_NAME);

    // Path to the just created empty db
    String outFileName = DB_PATH + DB_NAME;
    File sampleFile = new File(outFileName);
    //Open the empty db as the output stream
    OutputStream myOutput = new FileOutputStream(outFileName);

    //transfer bytes from the inputfile to the outputfile
    byte[] buffer = new byte[1024];
    int length;
    while ((length = myInput.read(buffer)) > 0) {
        myOutput.write(buffer, 0, length);
    }

    //Close the streams
    myOutput.flush();
    myOutput.close();
    myInput.close();

}

1 个答案:

答案 0 :(得分:0)

试试这个,

 public void CopyDataBaseFromAsset() throws IOException{
       InputStream in  = ctx.getAssets().open("mycontacts");
       Log.e("sample", "Starting copying" );
       String outputFileName = DATABASE_PATH+DATABASE_NAME;
       File databaseFile = new File( "/data/data/com.copy.copydatabasefromasset/databases");
        // check if databases folder exists, if not create one and its subfolders
        if (!databaseFile.exists()){
            databaseFile.mkdir();
        }

       OutputStream out = new FileOutputStream(outputFileName);

       byte[] buffer = new byte[1024];
       int length;


       while ((length = in.read(buffer))>0){
              out.write(buffer,0,length);
       }
       Log.e("sample", "Completed" );
       out.flush();
       out.close();
       in.close();

    }