问题标签 [documentfile]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
67 浏览

android - 无法在 SD 卡中的文件末尾附加字节 - Lollipop

我正在构建一个下载管理器来下载文件并将其保存到我的 SD 卡中。对于 API>=23,我必须使用FileOutputStream,它可以帮助我在下载失败时恢复文件。

但是,在 API 21 & API 22 (Lollipop) 中,不能写入 SD 卡,但可以在DocumentFile的帮助下完成。
我可以在 Lollipop 中创建文件和文件夹,但如果文件部分下载,则无法继续下载。我的代码如下:

它正在重写当前文件。我正在寻找处理 DocumentFile 中的附加模式。我已提供所有必需的权限。帮帮我,在此先感谢。

0 投票
1 回答
2326 浏览

android - 如何以编程方式在 Android 中写入 DocumentFile?

Android API 有DocumentFile. 这个类有canWrite()方法

假设我调用了这个方法,它返回了true. 还假设这个对象代表“原始”文件。

现在我该怎么做?

即,如何将“Hello world”文本写入该文件?

谢谢。

0 投票
0 回答
171 浏览

android - DocumentFile 重命名延迟

在我的应用程序中,我在 SD 卡上有原始文件,我使用 DocumentFile 在 SD 卡上创建临时文件,在那里写入一些数据,最后想用临时文件替换原始文件。使用 DocumentFile 我使用 DocumentFile 的 delete() 方法删除原始文件,然后使用 DocumentFile 的 renameTo() 方法将我的临时文件重命名为原始文件。两种方法都以结果 == true 完成,但在这大约 5-10 秒后,我在文件浏览器中看到了我的原始文件的旧版本。如果我根据被替换的原始文件方法的文件路径创建简单的文件对象,则 length() 将返回它之前版本的大约 5-10 秒长度。这种延迟从 Android M 开始就出现了。在 Android L 中没有这样的问题。自 Android M 以来,在使用 DocumentFile 导致这种效果时是否有任何限制?

0 投票
1 回答
128 浏览

android - 如何将 FLAG_SUPPORTS_MOVE 设置为文档?

最后我发现要移动Document我需要(以某种方式)设置FLAG_SUPPORTS_MOVE的实例。但是Document类没有任何setFlag()或其他方法。我尝试将标志设置为 URI,getContentResolver().takePersistableUriPermission()但 IDE 警告我使用了注释未指定的其他标志。我只想将所有文件从一个文件夹移动到 25 API 上的另一个文件夹。

0 投票
1 回答
1405 浏览

android - Android:如何获得可移动 sd 卡的永久写入权限?

我最近几天浏览了存储访问框架,但仍然没有得到它。

我的问题是:如何在选择 sd 卡位置后在没有提示选择路径的情况下在 sd 卡上创建具有这些权限的文件?

我可以在我的 sd 卡上选择一个路径,以便在那里使用以下代码创建一个文件。(这样可行)

在 onActivityResult 我做

0 投票
1 回答
1441 浏览

android - 探索从 Intent.ACTION_OPEN_DOCUMENT 检索到的 Uri 文件夹的内容

0 投票
1 回答
275 浏览

android - DocumentFile:创建特定目录名称的问题

我有一个应用程序必须在可移动 sdcard 上创建文件和目录。我使用DocumentFile API。在大多数情况下,它可以工作:) 但我发现一个案例不起作用(至少在三星 GS7 上):

我无法创建名为“ REM ”(不带引号)的目录。

测试用例:我在目录“/storage/9C33-6BBD/Xxxx”中工作,我想创建目录“REM”

这将显示“成功”,所以我很高兴。后来我想在这个目录中创建一个文件:“REM/myfile”。

这将显示“失败:REM 不存在

所以我用 DocumentFile.listFiles 列出文件并查看:“REM”(最后一个 DOT 消失了!

如果我这样做(new File("/storage/9C33-6BBD/Xxxx/R.E.M.")).exists(),它会返回 true !

如果我看一下“adb shell”

有谁知道我在哪里可以找到有关目录 displayName 限制的文档?

谢谢 :)

0 投票
0 回答
63 浏览

android - 三星 Galaxy S7 上加密的可移动 SD 卡上的 DocumentFile API 是否损坏?

我在UNENCRYPTED 可移动 SD 卡的根文件夹上创建了一个零大小的文件 aaa.txt。当我使用DocumentFile#listFiles()列出根文件夹中的所有条目时,文件 aaa.txt 的大小正确为 0 字节。

如果我从“设置”->“锁定屏幕和安全选项”->“加密 SD 卡”加密可移动 SD 卡并再次调用 DocumentFile#listFiles(), 我得到大小 8192 字节

正如我认为 DocumentFile API 应该向我显示加密和未加密情况的相同大小。设备型号三星 Galaxy S7,搭载 Android 7.0。

0 投票
1 回答
194 浏览

android - 从可移动存储上的文档文件中获取的 Action_View uri 无法播放视频文件

我可以通过 action_open_document 树将我的文件放在可移动存储上,它给了我一个文档文件。我无法使用 Action_view 打开此文件。文档文件中的 URI 确实有效!我可以用动作视图打开图像文件。

0 投票
1 回答
1837 浏览

java - 使用 OutputStream 写入 DocumentFile:数据似乎已写入,但文件最终为空

应用程序KDE Con​​nect允许通过 SFTP 从台式计算机远程浏览 Android 设备。从 Android 4.4 开始,开发人员不再直接通过文件系统对 SD 卡进行写入权限。所以我正在尝试使用存储访问框架(DocumentFile 等)移植 SFTP 模块

我正在使用 and 获得许可,Intent.ACTION_OPEN_DOCUMENT_TREE并将FLAG_GRANT_WRITE_URI_PERMISSION上下文传递给我的班级。

我能够在班级内的 SD 卡上创建新的空文件、重命名文件和删除文件,因此我相信我获得了必要的权限。但是,传输文件会导致创建一个空文件(0 字节)。我可以看到传输需要一定的时间,并且在桌面端有一个进度条,所以它不仅仅是中止。

这是来自 Apache SSHD 库的 SftpSubsystem 类的相关部分(请参阅此处的文档),并附有我自己的评论来解释发生了什么:

我想重写的 createOutputStream() 的原始实现,因为 RandomAccessFile 不适用于 DocumentFile:

我尝试实现它的方法之一:

我也尝试了一个简单的(偏移被忽略,但这只是一个测试):

我还尝试使用 FileChannel 并刷新和同步 FileOutputStream。

知道为什么我最终得到一个空文件吗?

编辑:这是一个小例子,我只是从现有文件中写入一个新文件。它有效,但这不是我真正想要做的(参见上面的代码),但我想我会提供一个示例来表明我了解如何写入 OutputStream 的基础知识。