Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android上对SAF文件的随机访问写入_Java_Android_Stream_Storage Access Framework - Fatal编程技术网

Java Android上对SAF文件的随机访问写入

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

我正试图实现对从Android存储访问框架检索到的流的“随机访问”写入

在我的场景中,我使用
OPEN\u DOCUMENT
intent选择一个文件,它给了我一个文档URI。然后我可以使用
ContentResolver
openOutputStream
。然而,从这一点来看,我看不到在流中“查找”以在文件中的给定位置写入的方法

是否有办法实现这一点(至少对于基于本地存储/SD卡的文件)

至少适用于本地存储/SD卡文件

你不知道你得到的是什么。用户可以选择用户想要的任何文档提供商(例如,Google Drive)

我看不到一种在流中“查找”以在文件中的给定位置写入的方法

部分原因是Java流很糟糕。但是,主要是为了文档提供者的灵活性。假设用户选择了一个本地存储其内容的提供者,但该提供者使用流密码进行加密。你不能直接跳到某个任意的地方——数据必须在一路上被解密


好的,您唯一的选择是将内容复制到您控制的某个文件中,然后您可以随机访问该文件。

感谢您的快速响应。只是为了进一步调查-当SAF授予我访问URI的权限,并且特定的URI表示本地文件时,这并不授予我直接使用该文件路径的能力,我仍然必须通过
ContentResolver
,对吗?(因为否则我可以使用
RandomAccessFile
和文件路径)@MartinZikmund:“这不允许我直接使用该文件路径”——你不知道文件路径是什么。例如,让我们回到我的答案中的“本地存储其内容但由流密码加密的提供商”。此提供程序将内容作为文件存储在该应用程序的
getFilesDir()
文件系统中。
Uri
不必标识该文件的路径。即使你使用一些脚本儿童算法对路径进行反向工程,你也没有文件系统权限,而且内容是加密的。@MartinZikmund:我很乐意同意SAF不是一个很好的API,我以前也遇到过这种特殊的问题(用于媒体播放)。不幸的是,“事情就是这样”。非常感谢您提供的信息:-)