【问题标题】:Why does getExternalStorageDirectory return my phone's root storage, not the SD card?为什么 getExternalStorageDirectory 返回我手机的根存储,而不是 SD 卡?
【发布时间】:2023-04-10 00:16:01
【问题描述】:

我正在尝试从手机 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/
  • 就在一个小时前,我遇到了同样的问题,并尝试随机添加/,它成功了!
  • 你能说说目录里有多少个文件吗?
  • 13 个文件,但这个数字是可变的。这有什么关系?

标签: java android


【解决方案1】:

我遇到了类似的问题,我尝试在末尾附加 /。您可以尝试以下操作:

/weights/input/

而不是

/weights/input

编辑: 在你编辑之后,我发现了这个:

getExternalStorageDirectory 被实现为返回任何设置 作为设备环境中的“外部存储”:

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,没有办法直接 获取外部 sdcard(如果它存在的话)。

另一种方法是检查isExternalStorageRemovable ()如果为 false,则给出手动选项

来源:This link.

【讨论】:

  • 非常抱歉,这是一个错误。最后的 / 以某种方式被剥离,isDirectory 仍然返回 false。
  • 但这在我的情况下工作得非常好。等等,我会告诉我在我的项目中做了什么。
  • 您好,您是否在清单中添加了权限?您必须授予读取外部存储的权限。这可能是它给出错误的原因。
  • 是的,我有:&lt;uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /&gt;
  • 你想从那个目录中读取的文件名是什么?你确定input 是一个目录吗?如果是,请查看编辑。
猜你喜欢
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-04
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
相关资源
最近更新 更多