Android中的文件写入权限错误

时间:2012-07-19 09:36:50

标签: android file-io android-sdcard

我正在向SDCard写一个文件并设置<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />它可以很好地工作到3.x但是在4.0上它会产生以下错误。

java.io.IOException: open failed: EACCES (Permission denied)
at java.io.File.createNewFile(File.java:940)
at com.gt.mLearning.app.VideoViewActivity.copyFile(VideoViewActivity.java:204)
at com.gt.mLearning.app.VideoViewActivity.access$3(VideoViewActivity.java:193)
at com.gt.mLearning.app.VideoViewActivity$Loader.doInBackground(VideoViewActivity.java:61)
at com.gt.mLearning.app.VideoViewActivity$Loader.doInBackground(VideoViewActivity.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:264)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
at libcore.io.Posix.open(Native Method)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
at java.io.File.createNewFile(File.java:933)

任何帮助或建议?

罗希特夏尔

5 个答案:

答案 0 :(得分:5)

猜猜但是你的手机可能仍然连接到电脑吗?如果您的SD卡仍然作为USB设备锁定,则可能会发生此错误。 希望这有帮助,  托拜厄斯

答案 1 :(得分:1)

后来我发现问题是特定于设备的。我从Android市场安装了文件管理器应用程序,它没有显示写入权限。这意味着该制造商的Android OS实施不提供导致该问题的写入权限。

答案 2 :(得分:0)

可能您已经对外部存储目录进行了硬编码,并且它可以在特定设备上运行。

Environment.getExternalStorageDirectory();

发布代码不仅仅是日志。

答案 3 :(得分:0)

您也可以检查您刚刚更新了Android O / S.一些重大变化导致SD卡问题。对我来说,我将SHV-E160K中的Android O / S从2.3.5升级到4.1.2,而Odin是三星固件更新应用程序。我遇到了问题。 我的详细错误消息如下:

02-14 11:00:43.057  22288-22288/? W/System.err﹕ java.io.IOException: open failed: EACCES (Permission denied)
02-14 11:00:43.057  22288-22288/? W/System.err﹕ at java.io.File.createNewFile(File.java:940)
02-14 11:00:43.057  22288-22288/? W/System.err﹕ at com.sec.android.util.IAPDeviceInfoEditor.activity.EditorActivity.createDeviceInfo(EditorActivity.java:222)
02-14 11:00:43.057  22288-22288/? W/System.err﹕ at com.sec.android.util.IAPDeviceInfoEditor.activity.EditorActivity.onClick(EditorActivity.java:121)
02-14 11:00:43.057  22288-22288/? W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
02-14 11:00:43.057  22288-22288/? W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:511)
02-14 11:00:43.057  22288-22288/? W/System.err﹕ at android.view.View$1.onClick(View.java:3685)
02-14 11:00:43.057  22288-22288/? W/System.err﹕ at android.view.View.performClick(View.java:4192)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at android.view.View$PerformClick.run(View.java:17248)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:615)
02-14 11:00:43.067      172-485/? V/AudioHardwareMSM8660﹕ open driver
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:92)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at android.os.Looper.loop(Looper.java:137)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:4950)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:511)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:997)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:764)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at libcore.io.Posix.open(Native Method)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at java.io.File.createNewFile(File.java:933)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ ... 16 more

原因是4.1.2无法识别2.3.5中的文件系统。我解决了这种格式化SD卡存储问题。格式并不意味着删除您的个人信息,如地址,备忘录或历史记录。在格式之后,它就像魔法一样。

答案 4 :(得分:0)

这可能会对你有所帮助。

在sdcard上写文件时遇到了同样的问题。我已经设置了写入文件所需的所有权限,但我使用了如下文件对象:

错误: File myFile = new File(Environment.getExternalStorageDirectory()。getAbsoluteFile()+ fileName);

<强>正确: 文件myFile = new File(Environment.getExternalStorageDirectory()。getAbsoluteFile(),fileName);

这意味着路径错了。