2012-07-24 48 views
0

我儘量讓短信日誌文件TXT,但我的設備發送一個錯誤信息像這樣不能寫在Android

07-18 10:11:33.956: E/One(1320): Could not write file /sdcard/log.txt (Permission denied) 

我的代碼寫入文件

File root = Environment.getExternalStorageDirectory(); 
try 
{ 
    BufferedWriter fw = new BufferedWriter(new FileWriter(new File("/sdcard/log.txt"), true)); 
    if (root.canWrite()) 
    { 
     fw.newLine(); 
     fw.write("----+ Monitoring SMS +----" + "\n"); 
     fw.write("- Pesan Masuk "+ "\n"); 
     fw.write(logSMS + "\n"); 
     fw.write("   ----+||+----" + "\n"); 
     fw.newLine(); 
     fw.close(); 
    } 
} catch (IOException e) { 
    Log.e("One", "Could not write file " + e.getMessage()); 
} 

我的應用程序的清單權限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.READ_SMS" /> 
<uses-permission android:name="android.permission.WRITE_SMS" /> 
<uses-permission android:name="android.permission.SEND_SMS" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 
<uses-permission android:name="android.permission.RECEIVE_MMS" /> 
<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission> 
<uses-permission android:name="android.permission.WRITE_CALENDAR"></uses-permission> 
<uses-permission android:name="android.permission.READ_CALENDAR"></uses-permission> 

我找不到任何錯誤,請幫我

+0

有關錯誤日誌,請參閱logcat。 – 2012-07-24 02:07:20

+0

我的意思是,我找不到我的代碼中的錯誤,但logcat發送錯誤消息: 07-18 10:11:33.956:E/One(1320):無法寫入文件/sdcard/log.txt被拒絕) – adrasa 2012-07-24 02:14:16

回答

1

在某些設備上,sdcard不在根目錄中。

你想要做的是替換"/sdcard/log.txt"root + "/log.txt"你有SD卡在那裏,但你沒有使用它。

+0

我發現同樣的錯誤信息: 07-18 10:03:41.946:E/One(494):無法寫入文件/mnt/sdcard/sdcard/log.txt(權限被拒絕) 我認爲,這是因爲目錄權限,如何直接從我的代碼更改目錄permision? – adrasa 2012-07-24 02:46:07

+0

您可能正在編寫root +「/sdcard/log.txt」。瞭解SmartLemon的建議。 – Erol 2012-07-24 02:48:56

+0

不,我已經更改爲:新的文件(根+「/log.txt」),但我仍然發現相同的錯誤 – adrasa 2012-07-24 02:57:02

0

可以嘗試用

BufferedWriter fw = new BufferedWriter(new FileWriter(new File(root.getAbsolutePath() + "/log.txt"), true)); 

更換

BufferedWriter fw = new BufferedWriter(new FileWriter(new File("/sdcard/log.txt"), true)); 

這是爲了確保您的代碼寫入到指定的外部存儲路徑的系統。因爲它在不同設備之間有所不同

+0

我發現了這個問題,問題出在模擬器上,當我用新的模擬器替換它時,那麼就沒有錯誤了,謝謝你的回答 – adrasa 2012-07-25 03:53:07