I am wondering if one can get a java.io.File from a DocumentFile.
大多数情况下是可以的。如果用户从主存储或辅助存储中选择了一个“文件”,那么您可以这样做,因为内容方案与文件或目录的文件路径之间存在一对一的关系。
但是,如果您真的需要java.io.File,最好使用文件选择器。
[更新]
content://com.android.externalstorage.documents/tree/primar%3ADCIM%2Fdeeper%2Fevendeeper
content://com.android.externalstorage.documents/tree/primary:DCIM/deeper/evendeeper
如果那个例子对应着
/storage/emulated/0/DCIM/deeper/evendeeper.
和
content://com.android.externalstorage.documents/tree/primary%3AAndroid%2Fcom.aaaa.org%2Ffiles%2Fafile.txt
content://com.android.externalstorage.documents/tree/primary:Android/com.aaaa.org/files/afile.txt
转换成
/storage/emulated/0/Android/com.aaa.org/files/afile.txt
如果你知道其中一个,那么你就知道所有的:它们之间存在一对一的关系。
转换的唯一事情是将 content://com.android.externalstorage.documents/tree/primary:
替换为 /storage/emulated/0/
这将问题简化为确定 /storage/emulated/0/
。
为此,您必须让用户选择所选内容方案的文件系统路径的根目录。如果无法选择,则通常可以在设备上使用文件浏览器应用程序找到它。最后,您可以让路径被键入。
这与 Android SAF(存储访问框架):从TreeUri获取特定文件Uri 或其他带有标签 storage-acccess-framework
的帖子完全相反。