2011-11-21 71 views
1

我使用此代碼,它只保留到輸出文件行並引發異常。任何人都可以看到這條線可能是什麼問題?複製/備份數據庫到SD卡Android

try{ 

     Log.e("Trying","try"); 
    // Local database 
    InputStream input = new FileInputStream("/data/data/package/databases/database"); 
    Log.e("Input","in"); 
    // create directory for backup 

    // Path to the external backup 
    OutputStream output = new FileOutputStream("/sdcard/android/package/databases/mydatabase.db"); 

    Log.e("Output","out"); 

    // transfer bytes from the Input File to the Output File 
    byte[] buffer = new byte[1024]; 

    Log.e("Buffer","Buff"); 
    int length; 
    while ((length = input.read(buffer))>0) { 
     output.write(buffer, 0, length); 
    } 

    Log.e("After While","try"); 
    output.flush(); 
    output.close(); 
    input.close(); 
    } catch (IOException e) { 

     throw new Error("Copying Failed"); 

    } 
+0

你可以請把THT異常堆棧跟蹤 –

+0

你在哪裏捕獲異常,你應該做'e.printSatckTrace()'然後將該日誌輸出添加到您的答案中。這樣我們可以看到實際拋出的錯誤。 – Jakar

+1

另外,無論何時您參考Eduardo,您都應該使用Environment:'Environment.getExternalStorageDirectory()'。然後在爲SD卡返回的文件上調用'getAbsolutePath()'。 – Jakar

回答

0

我懷疑這是你的問題的原因,但以下兩行:

OutputStream output = new FileOutputStream("/sdcard/android/package/databases/mydatabase.db"); 
    InputStream input = new FileInputStream("/data/data/package/databases/database"); 

應該變成:

File sdcard = Environment.getExternalStorageDirectory(); 
    File outputFile = new File(sdcard, "android/package/databases/mydatabase. 
    File data = Environment.getDataDirectory(); 
    File inputFile = new File(data, "data/package/databases/database"); 

    InputStream input = new FileInputStream(inputFile); 
    OutputStream output = new FileOutputStream(outputFile); 

這是因爲SD卡和數據目錄可能在不同的手機上有不同的地方。通常情況下,您需要執行/mnt/sdcard/來實際參考SD卡,但最好的方法仍然是使用文件並使用Environment,如上所示。

你當然需要把它放到一個try塊中,然後在catch裏面,你需要把e.printStackTrace();,然後如果有錯誤發生,你可以看看logcat來確定你的代碼失敗的地方,而不是每隔幾行使用一個日誌。

而且,在你的清單,你必須有以下權限:

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