[英]Open failed: EACCES (Permission denied)?
new File(System.getenv("SECONDARY_STORAGE") + "/foo/", "bar.txt").createNewFile()
該行代碼應該已經在SD卡的目錄foo中創建了一個文件(已安裝SD卡)。 但是System.getenv("SECONDARY_STORAGE")
返回"/storage/sdcard1"
。 它應該可以正常工作,只是應該先創建文件的代碼才會拋出該異常
android.system.ErrnoException: open failed: EACCES (Permission denied)
注意: IOException
的子類
使用System.getenv("SECONDARY_STORAGE")
可以正常工作,但是,所有寫入方法都會因相同的異常而失敗。
使用"/sdcard/"
可以輕松避免這種情況,但是這種方法並不可靠,因為並非所有制造商都會在根目錄中放置sdcard快捷方式。
有辦法可靠地解決這個問題嗎?
我也遇到了同樣的問題。使用權限在錯誤的位置。 這是對的:
<manifest>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
...
<application>
...
<activity>
...
</activity>
</application>
</manifest>
該行代碼應該已經在SD卡的目錄foo中創建了一個文件(已安裝SD卡)。
過去四年左右制造的任何設備上都沒有。 在此之前,它也不可靠地工作,因為並不需要存在這樣的環境變量並指向您可以使用的任何位置。
使用System.getenv(“ SECONDARY_STORAGE”)讀取效果很好
如果通過“讀取”來表示“從該未記錄的,不受支持的環境變量指向的文件系統位置讀取”,那么它僅在碰巧在該未記錄的,不受支持的環境變量中發布半有用值的設備上起作用。
使用“ / sdcard /”可以輕松避免這種情況,但是這種方法並不可靠,因為並非所有制造商都會在根目錄中放置sdcard快捷方式。
它也沒有指向SD卡。
有辦法可靠地解決這個問題嗎?
您無法寫入可移動存儲中的任意位置。
最簡單地寫入可移動存儲在由所提供的位置getExternalFilesDirs()
getExternalCacheDirs()
和getExternalMediaDirs()
上的方法Context
。 如果這些返回的位置超過2個,則第二個及后續位置位於可移動存儲中,並且您具有對它們的完全讀取/寫入權限。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.