Environment.getExternalStorageDirectory() 和 Environment.getExternalStorageDirectory().getAbsolutePath() 之间的区别

Difference between Environment.getExternalStorageDirectory() and Environment.getExternalStorageDirectory().getAbsolutePath()

有什么区别

Environment.getExternalStorageDirectory() 

Environment.getExternalStorageDirectory().getAbsolutePath()

Environment.getExternalStorageDirectory().getCanonicalPath()

Environment.getExternalStorageDirectory().getPath()

我知道什么是 getAbsolutePath()、getCanonicalPath() 和 getPath()。

我在一些例子中看到 Environment.getExternalStorageDirectory() 是这样使用的:

getExternalStorageDirectory() + "/somefolder/anotherfolder/"

让我感到困惑的是 getExternalStorageDirectory() 本身默认指的是什么以及为什么在某些情况下人们使用额外的方法以及什么时候可以只使用 getExternalStorageDirectory() 而没有任何额外的东西?

根据文档一个 returns 文件对象,getAbsolutePath() 是文件 class 方法。

I know what getAbsolutePath(), getCanonicalPath() and getPath() are.

那么您已经知道原始问题的答案 ("What's the difference between..."),因为唯一不同的是这些调用。

what getExternalStorageDirectory() itself as default refers to

指的是外部存储的根目录。当用户通过 USB 电缆安装他们的 Android 设备并获得驱动器号或卷或其他东西时,该驱动器指向 getExternalStorageDirectory() 指向的目录。

一般来说,开发人员不应使用 getExternalStorageDirectory(),而应使用 getExternalFilesDir()Context 上的 kin,或 Environment 上的 getExternalStoragePublicDirectory()

why in some cases people use extra methods

好吧,您必须创建 File 对象以某种方式指向外部存储上的某个位置。虽然最好为此使用适当的 File 构造函数,但一些懒惰的程序员使用字符串连接。为此,您需要一个字符串。

when it is alright to use simply getExternalStorageDirectory() without anything extra to it?

从来没有,或者接近于它,仅仅因为它本身不是一个有用的值。这类似于询问何时在 Windows 编程中使用 C:。那是一个驱动器号,很少有一个简单的驱动器号本身就足够了。我们需要目录或文件的路径,为此,我们需要向 C: 添加内容(至少,一个反斜杠)。