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

Java 为什么getExternalStorageDirectory返回我的手机';s根存储,而不是SD卡?,java,android,Java,Android,我正在尝试读取手机SD卡上的文件夹,路径为\weights\input。Android的Environment.getExternalStorageDirectory().toString()返回/storage/emulated/0,该路径的isDirectory()返回true。但当我执行以下代码时: File weights = Environment.getExternalStorageDirectory(); List<File> inputs = getListFiles

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

File weights = Environment.getExternalStorageDirectory();
List<File> inputs = getListFiles(weights);
File weights=Environment.getExternalStorageDirectory();
列表输入=getListFiles(权重);
列表
inputs
包含手机内部存储器中的所有文件,而不是SD卡,因此当我在
inputs
中查找目录时,我的应用程序失败


为什么会这样?顺便说一句,我完全是一个Android和Java新手。完全正确。

我遇到了类似的问题,我尝试在最后添加
/
。您可以尝试以下操作:

/weights/input/
而不是

/weights/input
编辑: 编辑后,我发现:

getExternalStorageDirectory
用于返回所设置的内容 作为设备环境中的“外部存储器”:

public static File getExternalStorageDirectory() {
    return EXTERNAL_STORAGE_DIRECTORY;
}
外部存储\u目录
是:

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(字符串类型)
需要 以下字符串之一:

目录音乐、目录播客、目录铃声、目录警报、目录通知、目录图片、, 目录电影、目录下载或目录DCIM可能不是 空。

因此,它并不意味着返回sd卡根

另一种选择:

最后,
getExternalStorageState()
将返回文件系统 安装在
/mnt/sdcard/
中。根据此答案中的Commonware: ,没有办法直接 获取外部SD卡(如果存在)

另一种方法是检查
isExternalStorageRemovable()
和 如果为false,请提供一个手动选项


来源:

尝试添加
/weights/input/
就在一小时前,我遇到了同样的问题,尝试随机添加
/
,结果成功了!你能告诉我目录中有多少个文件吗?13个文件,但这个数字是可变的。那有什么关系?很抱歉,那是个错误。最后的/不知何故被剥离了,并且
isDirectory
仍然返回false。但是在我的例子中,这非常好。等等,我会告诉你我在我的项目中做了什么。嘿,你在menifest中添加权限了吗?您必须授予读取外部存储的权限。这可能是它给出false的原因。是的,我有:
您想从该目录中读取的文件名是什么?您确定
input
是一个目录吗?如果是,请参阅编辑。