我试图从Galaxy S4上的文件夹中读取文件。当我将文件放在根目录中时,我可以毫无问题地访问它:
File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "MyFile");
但我想将我的文件放在子目录中。当我创建一个文件夹' A'时,将我的文件放在其中并尝试使用以下文件访问它:
File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separatorChar + "A", "MyFile");
我无法阅读。当我可以访问根目录时,是否需要某种权限以及背后的逻辑?
答案 0 :(得分:1)
你可以在这里阅读:
http://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory()
不建议访问此文件夹:
应用程序不应直接使用此顶级目录,以避免污染用户的根命名空间。应该将应用程序专用的任何文件放在Context.getExternalFilesDir返回的目录中,如果卸载了应用程序,系统将负责删除。
此外,还需要许可:
写入此路径需要WRITE_EXTERNAL_STORAGE权限,从读取权限开始需要READ_EXTERNAL_STORAGE权限,如果您持有写入权限,则会自动授予该权限。
[编辑]
此外,由于您使用的是s4 - 可能是4.4+设备,您应该知道,由于KitKat Google禁止在可移动媒体上进行写访问,因此您只能读取它,或将其写入您的应用程序文件夹:
http://commonsware.com/blog/2014/04/09/storage-situation-removable-storage.html
因此,应用程序可以使用各种未记录和不受支持的技巧读取可移动媒体上的文件,以查找可移动媒体。但是,应用程序无法写入或以其他方式修改此类可移动存储。请注意,设备制造商自己可能有办法解决这个问题,但普通的应用程序开发人员却没有。