Java Android上对SAF文件的随机访问写入
我正试图实现对从Android存储访问框架检索到的流的“随机访问”写入 在我的场景中,我使用Java Android上对SAF文件的随机访问写入,java,android,stream,storage-access-framework,Java,Android,Stream,Storage Access Framework,我正试图实现对从Android存储访问框架检索到的流的“随机访问”写入 在我的场景中,我使用OPEN\u DOCUMENTintent选择一个文件,它给了我一个文档URI。然后我可以使用ContentResolver来openOutputStream。然而,从这一点来看,我看不到在流中“查找”以在文件中的给定位置写入的方法 是否有办法实现这一点(至少对于基于本地存储/SD卡的文件) 至少适用于本地存储/SD卡文件 你不知道你得到的是什么。用户可以选择用户想要的任何文档提供商(例如,Google
OPEN\u DOCUMENT
intent选择一个文件,它给了我一个文档URI。然后我可以使用ContentResolver
来openOutputStream
。然而,从这一点来看,我看不到在流中“查找”以在文件中的给定位置写入的方法
是否有办法实现这一点(至少对于基于本地存储/SD卡的文件)
至少适用于本地存储/SD卡文件
你不知道你得到的是什么。用户可以选择用户想要的任何文档提供商(例如,Google Drive)
我看不到一种在流中“查找”以在文件中的给定位置写入的方法
部分原因是Java流很糟糕。但是,主要是为了文档提供者的灵活性。假设用户选择了一个本地存储其内容的提供者,但该提供者使用流密码进行加密。你不能直接跳到某个任意的地方——数据必须在一路上被解密
好的,您唯一的选择是将内容复制到您控制的某个文件中,然后您可以随机访问该文件。感谢您的快速响应。只是为了进一步调查-当SAF授予我访问URI的权限,并且特定的URI表示本地文件时,这并不授予我直接使用该文件路径的能力,我仍然必须通过
ContentResolver
,对吗?(因为否则我可以使用RandomAccessFile
和文件路径)@MartinZikmund:“这不允许我直接使用该文件路径”——你不知道文件路径是什么。例如,让我们回到我的答案中的“本地存储其内容但由流密码加密的提供商”。此提供程序将内容作为文件存储在该应用程序的getFilesDir()
文件系统中。Uri
不必标识该文件的路径。即使你使用一些脚本儿童算法对路径进行反向工程,你也没有文件系统权限,而且内容是加密的。@MartinZikmund:我很乐意同意SAF不是一个很好的API,我以前也遇到过这种特殊的问题(用于媒体播放)。不幸的是,“事情就是这样”。非常感谢您提供的信息:-)