2013-04-10 83 views
1

我試圖將文本文件保存到SD卡但我得到Eacess(權限定義)錯誤。我的代碼看起來如下:嘗試將文件保存到SD卡時拒絕准入

 try { 
      File myFile = new File(Environment.getExternalStorageDirectory().getPath() + "/myfile"); 
      myFile.createNewFile(); 
      FileOutputStream fOut = new FileOutputStream(myFile); 
      OutputStreamWriter myOutWriter = 
            new OutputStreamWriter(fOut); 
      myOutWriter.append(text.getText()); 
      myOutWriter.close(); 
      fOut.close(); 
      Toast.makeText(getBaseContext(), 
        "Done writing SD 'mysdfile.txt'", 
        Toast.LENGTH_SHORT).show(); 
     } catch (Exception e) { 
      Toast.makeText(getBaseContext(), e.getMessage(), 
        Toast.LENGTH_SHORT).show(); 
     } 

我已經允許`

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />` 
在Android清單

伊夫

一直在看有關這個問題的一些其他職位,但沒有解決它。

我失去了什麼?

更新我的清單文件

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.files" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.example.files.FilesActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 
+1

首先,發佈您的整個清單,以便我們確認您的<使用權限>在適當的位置。其次,不要使用連接來創建一個'File'對象 - 使用適當的'File'構造函數來獲取一個目錄'File'和文件名'String'。第三,不要使用'getBaseContext()' - 使用'this'。第四,不要使用'Toast'作爲唯一的調試輸出 - 使用'Log.e()',這樣你就可以看到完整的堆棧跟蹤,並確切地確定問題出現在哪條線上。 – CommonsWare 2013-04-10 22:03:53

+0

@CommonsWare將清單文件添加到問題 – 2013-04-10 22:08:01

+0

那麼'<使用權限>似乎是在正確的位置,偶爾會讓開發人員絆倒。接下來,如果您發佈整個堆棧跟蹤並指出源代碼中的哪一行正在生成異常,那將會非常有用。另外,如果你在模擬器上運行它,請確保你爲模擬器提供了一些外部存儲器(例如,爲SD卡尺寸填寫'32')。 – CommonsWare 2013-04-10 22:09:10

回答

2

要保存文件到外部存儲設備,它有助於有外部存儲。 :-)

不幸的是,AVD管理器默認沒有外部存儲器(儘管我曾建議他們改變這一點)。因此,如果您正在使用仿真器,請仔細檢查以確保您已填寫「SD卡」大小的值。

我通常會分配一些小的東西,比如32MB--足以讓您可以使用外部存儲,而不是嚼碎一堆硬盤或者減慢初始AVD啓動速度。當然,如果您計劃測試需要更多外部存儲的東西,請選擇適合的值。