2013-09-30 50 views
11

SD卡,我這段代碼拷貝數據庫文件中的android

File dbFile=getDatabasePath("EdsysEyfsDB.db"); 
       Log.v("database name checking", dbFile.toString()); 

我想複製這個數據庫文件到SD卡,所以我可以爲做一些操作讓我的數據庫文件。但我無法對此進行任何操作。下面的代碼是使用複製到SD卡

  if (dbFile.exists()) { 
         InputStream inStream = new FileInputStream(dbFile); 
         String file = Environment.getExternalStorageDirectory().getPath() 
          +"/" + "database.db"; 
         Log.d("file name checking in dbFilecondition", file); 
         FileOutputStream fs = new FileOutputStream(file); 
         byte[] buffer = new byte[1444]; 
         while ((byteread = inStream.read(buffer)) != -1) { 
          bytesum += byteread; 
          fs.write(buffer, 0, byteread); 
         } 
         inStream.close(); 
         fs.close(); 
        } 

但我不打算在此condition.The數據庫文件名是否正確即將來臨logcat的。我已經給了讀寫文件許可。

回答

40

試試這個希望這可以幫助你

public void exportDatabse(String databaseName) { 
     try { 
      File sd = Environment.getExternalStorageDirectory(); 
      File data = Environment.getDataDirectory(); 

      if (sd.canWrite()) { 
       String currentDBPath = "//data//"+getPackageName()+"//databases//"+databaseName+""; 
       String backupDBPath = "backupname.db"; 
       File currentDB = new File(data, currentDBPath); 
       File backupDB = new File(sd, backupDBPath); 

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

     } 
    } 

如何調用

exportDatabse("YourDBName"); 

注:

記住要添加權限寫入外部存儲與 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />,否則sd.canWrite()將是錯誤的。

+0

請記住使用''<使用權限android:name =「android>'''',否則''sd.canWrite()''將寫入外部存儲的權限設置爲false。 – Daniel