我们应该在 Android 中使用 getPath 还是 getAbsolutePath

Should we use getPath or getAbsolutePath in Android

在Android系统中处理文件时,我们应该使用File getPath还是getAbsolutePath

例如我们下载了文件,然后我们使用DownloadManager.addCompletedDownload()将这个文件添加到全局downloads文件夹以在那里可用,我们应该通过哪个path

另一个例子,当我们在 context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).getPath() 文件夹中创建 File 时,getPathgetAbsolutePath

最后一个例子,当我们使用 MediaScannerConnection.scanFile()

根据DOCS

path: String: absolute pathname to the file.

所以,我想你应该传递绝对路径。但是,请注意 DownloadManager.addCompletedDownload() 在 Android Q

上被弃用

在 Android Q 上,他们引入了分区存储概念,这对您访问文件的方式产生了巨大影响。我想你可以从 HERE

获得更多信息

因此,我强烈建议在您的实施中测试并考虑 Android Q 设备。

在Android上,不依赖System.getProperty("user.dir")是惯例。无论如何,当 zigote 启动您的应用程序时,它被设置为 /,并且只有一个文件系统,因此出于所有实际目的,File.getPath()File.getAbsolutePath() 将产生相同的结果。

但是如果您追求风格点,您应该在进程与其他进程(包括系统服务)通信时使用绝对路径。因此,与 DownloadManagerMediaScanner 交谈,您可以使用 getAbsolutePath() 更好地表达您的意图。另一方面,对于应用内文件路径,例如getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)查找和读取文件,getPath()会更合适。