我正在尝试从手机 SD 卡上路径为 \weights\input
的文件夹中读取数据。 Android 的 Environment.getExternalStorageDirectory().toString()
返回 /storage/emulated/0
,并且该路径的 isDirectory()
返回 true。但是当我执行下面的代码时:
File weights = Environment.getExternalStorageDirectory();
List<File> inputs = getListFiles(weights);
inputs
列表包含我手机内部存储器中的所有文件,而不是 SD 卡,因此当我在 inputs
中查找目录时,我的应用程序失败了。
这是为什么?顺便说一句,我完全是 Android 和 Java 的新手。完全。
最佳答案
我遇到了类似的问题,我尝试在末尾附加 /
。您可以尝试以下操作:
/weights/input/
代替
/weights/input
编辑: 编辑后,我发现了这个:
getExternalStorageDirectory
is implemented to return whatever is set as "external storage" in the device environment:public static File getExternalStorageDirectory() { return EXTERNAL_STORAGE_DIRECTORY; }
and
EXTERNAL_STORAGE_DIRECTORY
is:private static final File EXTERNAL_STORAGE_DIRECTORY = getDirectory("EXTERNAL_STORAGE", "/sdcard"); static File getDirectory(String variableName, String defaultPath) { String path = System.getenv(variableName); return path == null ? new File(defaultPath) : new File(path); }
In contrast,
getExternalStoragePublicDirectory(String type)
requires one of these strings:DIRECTORY_MUSIC, DIRECTORY_PODCASTS, DIRECTORY_RINGTONES, DIRECTORY_ALARMS, DIRECTORY_NOTIFICATIONS, DIRECTORY_PICTURES, DIRECTORY_MOVIES, DIRECTORY_DOWNLOADS, or DIRECTORY_DCIM. May not be null.
所以它并不是要返回 sd 卡根。
替代方案:
最后,
getExternalStorageState()
将返回文件系统 挂载在/mnt/sdcard/
。根据 CommonsWare 在这个答案中的说法: Find an external SD card location ,没有办法直接 获取外部 SD 卡(如果它存在的话)。另一种方法是检查
isExternalStorageRemovable ()
和 给出一个手动选项,如果它是假的。
来源:This link.
关于java - 为什么 getExternalStorageDirectory 返回我手机的根存储,而不是 SD 卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39305757/