2016-04-08 28 views
0

在Android的时候,如果我想将文件从一个位置复制到另一个:查错的权限和大小读/写文件

  1. 我如何检查我有正确的舱单的权限?我知道你在清单中包含权限,但假设我们不知道我们是否包含它 - 如果我们缺少权限,我们如何捕获异常?

  2. 如何验证我是否具有读取源文件的权限?

  3. 如何验证我是否具有目标的写入权限?

  4. 如何验证是否有足够的空间来执行写入?

  5. 如何验证写入是否成功执行?

回答

1

我们如何捕捉异常,如果我们缺乏的权限?

根据权限而有所不同。

如何验证我是否具有读取源文件的权限?

Call canRead() on File

如何验证我是否有目的地的写入权限?

Call canWrite() on File

如何验证是否有足够的空间来执行写入?

只要您进行计算,由于设备上的其他应用程序的行为,该值可能已更改。

您可以使用methods on StatFs来确定可用空间,但我会给自己一个重要的缓冲区。

如何验证写入是否成功执行?

开始在您的通话FileOutputStreamgetFD().sync()flush()close()之前,确保所有字节写入磁盘,而不是由内核和文件系统实现缓存。对于大多数情况,这就足够了。

也欢迎您将内容读回并根据内存中的内容对其进行验证,以确认该文件似乎包含应该包含的内容。

+0

我不明白canWrite()的例子。复制/移动文件是否需要写入权限?我更多地指的是检查我是否有能力写入源媒体,但这可能与(1)相关。 – KaliMa

+1

@KaliMa:“复制/移动文件需要写入权限吗?” - 您需要能够写入目标文件来获得副本。对于重命名/移动,您需要能够读取和写入原始位置和目的地。 – CommonsWare

+0

“因许可而异。”凭什么?我指的是像(例如)android.permission.WRITE_EXTERNAL_STORAGE或android.permission.READ_EXTERNAL_STORAGE – KaliMa