Android中的文件写入权限错误

问题描述:

我正在向SDCard写入文件,并将其设置为<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />它可以正常工作到3.x,但在4.0上它提供了以下错误。Android中的文件写入权限错误

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) 

任何帮助或建议?

罗希特

+0

您正在使用模拟器或设备进行检查吗? – Ponmalar 2012-08-07 12:35:06

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

也许你已硬编码的外部存储目录,它适用于特定设备。

Environment.getExternalStorageDirectory(); 

发布你的代码将有助于不仅仅是日志等等。

+0

感谢发布回复亲爱的,但我这样做'Environment.getExternalStorageDirectory()。canWrite()'并得到错误:(悲伤 – 2012-07-19 10:25:27

+0

你的代码工作以外的AsyncTask? – mihail 2012-07-19 10:36:24

+0

没有尝试过..是否重要? – 2012-07-19 11:03:41

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

+0

感谢您的答复,没有它不是这样的。后来我发现问题出在设备上。 – 2012-11-26 23:19:29

+0

我有同样的问题,你给了我答案。感谢那! – Chris 2013-02-14 13:54:31

+0

当然,欢迎您(如同其他选项一样):-) – 2013-02-15 15:46:57

你可能会检查你刚刚更新了你的Android操作系统。一些重大变化导致SD卡问题。对于我来说,我使用Odin(这是三星固件更新应用程序)将SHV-E160K中的Android O/S从2.3.5更新到4.1.2。我面临问题。 我详细的错误信息如下:

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卡存储。格式并不意味着删除您的个人信息,如地址,备忘录或历史记录。格式化后,它就像魔术一样。

这可能对你有帮助。

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

错误: myfile文件=新的文件(Environment.getExternalStorageDirectory()getAbsoluteFile()+文件名);

正确: myfile文件=新的文件(Environment.getExternalStorageDirectory()getAbsoluteFile(),文件名。);

这意味着路径是错误的。