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

标签 java android

我正在尝试从手机 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/

相关文章:

java - VisualVM 在启动时挂起 "computing description"

Java swing多个JTables一个ColumnModel

java - 比较同一时区的java Date与sql TIMESTAMP

java - 如何获取 IBM Java 8 的调试信息包

android - 如何更新 Android 应用程序小部件的 UI

java - 单击 RecyclerView 项目后禁用按钮时出现问题

android - 前台 Activity 中的 NfcAdapter.enableReaderMode 是否应该覆盖 Intent 标签调度系统?

java - Sonar 未在 sonar.api.resources 中找到依赖项

android - 为特定模块或依赖项禁用 android.enableJetifier

android - picasso 套接字异常