1

在 Android 系统中处理文件时,我们应该使用File getPathorgetAbsolutePath吗?

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

当我们创建File内部context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).getPath()文件夹时的另一个例子,getPath或者getAbsolutePath

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

4

2 回答 2

2

根据DOCS

path: String: 文件的绝对路径名。

所以,我想你应该通过绝对路径。但是,请注意DownloadManager.addCompletedDownload()在 Android Q 上已弃用

在 Android Q 上,他们引入了 Scoped Storage 概念,这对您访问文件的方式产生了巨大影响。我想你可以从这里获得更多信息

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

于 2020-06-16T18:01:43.923 回答
1

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

但是,如果您要使用样式点,则当您的进程与其他进程(包括系统服务)通信时,您应该使用绝对路径。因此,与DownloadManagerMediaScanner 交谈,您会更好地使用getAbsolutePath(). 另一方面,对于应用内文件路径,例如getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)查找和读取文件,getPath()将更合适。

于 2020-06-21T08:37:59.157 回答