我们应该在 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
时,getPath
或 getAbsolutePath
?
最后一个例子,当我们使用 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()
将产生相同的结果。
但是如果您追求风格点,您应该在进程与其他进程(包括系统服务)通信时使用绝对路径。因此,与 DownloadManager 或 MediaScanner 交谈,您可以使用 getAbsolutePath()
更好地表达您的意图。另一方面,对于应用内文件路径,例如getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)
查找和读取文件,getPath()
会更合适。
在Android系统中处理文件时,我们应该使用File
getPath
还是getAbsolutePath
?
例如我们下载了文件,然后我们使用DownloadManager.addCompletedDownload()
将这个文件添加到全局downloads
文件夹以在那里可用,我们应该通过哪个path
?
另一个例子,当我们在 context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).getPath()
文件夹中创建 File
时,getPath
或 getAbsolutePath
?
最后一个例子,当我们使用 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()
将产生相同的结果。
但是如果您追求风格点,您应该在进程与其他进程(包括系统服务)通信时使用绝对路径。因此,与 DownloadManager 或 MediaScanner 交谈,您可以使用 getAbsolutePath()
更好地表达您的意图。另一方面,对于应用内文件路径,例如getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)
查找和读取文件,getPath()
会更合适。