为什么getExternalStorageDirectory会返回我手机的根存储,而不是SD卡?

时间:2016-09-03 10:14:13

标签: java android

我尝试使用路径\weights\input从手机的SD卡上的文件夹中读取。 Android' Environment.getExternalStorageDirectory().toString()返回/storage/emulated/0,该路径的isDirectory()返回true。但是当我执行以下代码时:

File weights = Environment.getExternalStorageDirectory();
List<File> inputs = getListFiles(weights);

列表inputs包含手机内部存储空间中的所有文件,而不是SD卡,因此当我在inputs中查找目录时,我的应用程序失败。

这是为什么?顺便说一下,我完全是Android和Java的新手。完全。

1 个答案:

答案 0 :(得分:6)

我有类似的问题,我尝试在最后附加/。您可以尝试以下操作:

/weights/input/

而不是

/weights/input

修改 编辑后,我发现了这个:

  实现

getExternalStorageDirectory以返回所设置的内容   as&#34;外部存储&#34;在设备环境中:

public static File getExternalStorageDirectory() {
    return EXTERNAL_STORAGE_DIRECTORY;
}
     

EXTERNAL_STORAGE_DIRECTORY是:

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);
}
     

相反,getExternalStoragePublicDirectory(String type)需要   其中一个字符串:

     
    

DIRECTORY_MUSIC,DIRECTORY_PODCASTS,DIRECTORY_RINGTONES,DIRECTORY_ALARMS,DIRECTORY_NOTIFICATIONS,DIRECTORY_PICTURES,     DIRECTORY_MOVIES,DIRECTORY_DOWNLOADS或DIRECTORY_DCIM。 可能不会     空。

  
     

所以它并不意味着返回SD卡根。

     

替代方案:

     

最后,getExternalStorageState()将返回文件系统   安装在/mnt/sdcard/。根据CommonsWare的回答:   Find an external SD card location,没有办法直接   获取外部SD卡(如果它甚至存在)。

     

另一种方法是检查isExternalStorageRemovable ()和   如果错误,请提供手动选项。

来源:This link.