2016-03-18 62 views
0

我想寫外部存儲文件的文件,但它給了我錯誤:不能寫在外部存儲

java.io.FileNotFoundException: /mnt/media_rw/sdcard1/Backup/Contact/18-03-2016 16:03:17.vcf: open failed: EACCES (Permission denied)

我的代碼:

fileContact = new File("/mnt/media_rw/sdcard1/", "Backup/Contact"); 
          if (!fileContact.exists()) { 
           fileContact.mkdirs(); 
          } 

          Calendar c = Calendar.getInstance(); 
          SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:MM:ss"); 
          String strDate = sdf.format(c.getTime()); 

          StoragePath = fileContact.getAbsolutePath() + "/" + strDate + ".vcf"; 

當我寫fileContact = new File("/sdcard/", "/Backup/Contact");則寫入文件internal storage。我想在我的memory card(external sdcard)上寫下這個文件。

我從此代碼獲取所有掛載/外部存儲列表 - http://stackoverflow.com/a/19982338/3774906,它給了我完美的列表。

清單文件:

<?xml version="1.0" encoding="utf-8"?> 
<manifest 
    package="com.xxx.xx" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 



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



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

    <uses-feature android:name="android.hardware.usb.host"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity 
      android:name=".MainActivity" 
      android:autoRemoveFromRecents="true" 
      android:launchMode="singleTask"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN"/> 

       <category android:name="android.intent.category.LAUNCHER"/> 
      </intent-filter> 

     </activity> 


    </application> 

</manifest> 

所以,我怎麼能寫在外部存儲卡的文件?

+0

請出示您的完整清單.... – Opiatefuchs

+0

@Opiatefuchs添加了我的完整清單。 – deepak

+0

並且不要硬編碼路徑。 Environment.getExternalStorageDirectory()。getAbsolutePath()將爲您提供sdcard的路徑。但請注意,有些製造商甚至會將您帶到virtuell sd卡。閱讀有關文檔路徑:http://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory%28%29 – Opiatefuchs

回答

0

你下面一行訪問外部存儲是似乎有問題

fileContact = new File("/mnt/media_rw/sdcard1/", "Backup/Contact"); 

一些設備製造商不使用sdcard1

始終遵循這種方式訪問​​外部storage

String state = Environment.getExternalStorageState(); 

File root = android.os.Environment.getExternalStorageDirectory(); 
+0

狀態會給我外部存儲狀態嗎? – deepak

+0

好的。讓我看看這個文檔 – deepak

+0

我已經讀過這個,我也得到了狀態掛載。即使我也寫'fileContact =新文件(getExternalFilesDir(null),「MagicSpy/Backup/Contact」);'但它不會在安裝的外部SD卡上創建文件 – deepak