在Android的时候,如果我想将文件从一个位置复制到另一个:查错的权限和大小读/写文件
我如何检查我有正确的舱单的权限?我知道你在清单中包含权限,但假设我们不知道我们是否包含它 - 如果我们缺少权限,我们如何捕获异常?
如何验证我是否具有读取源文件的权限?
如何验证我是否具有目标的写入权限?
如何验证是否有足够的空间来执行写入?
如何验证写入是否成功执行?
在Android的时候,如果我想将文件从一个位置复制到另一个:查错的权限和大小读/写文件
我如何检查我有正确的舱单的权限?我知道你在清单中包含权限,但假设我们不知道我们是否包含它 - 如果我们缺少权限,我们如何捕获异常?
如何验证我是否具有读取源文件的权限?
如何验证我是否具有目标的写入权限?
如何验证是否有足够的空间来执行写入?
如何验证写入是否成功执行?
我们如何捕捉异常,如果我们缺乏的权限?
根据权限而有所不同。
如何验证我是否具有读取源文件的权限?
Call canRead()
on File
。
如何验证我是否有目的地的写入权限?
Call canWrite()
on File
。
如何验证是否有足够的空间来执行写入?
只要您进行计算,由于设备上的其他应用程序的行为,该值可能已更改。
您可以使用methods on StatFs
来确定可用空间,但我会给自己一个重要的缓冲区。
如何验证写入是否成功执行?
开始在您的通话FileOutputStream
getFD().sync()
,flush()
后close()
之前,确保所有字节写入磁盘,而不是由内核和文件系统实现缓存。对于大多数情况,这就足够了。
也欢迎您将内容读回并根据内存中的内容对其进行验证,以确认该文件似乎包含应该包含的内容。
我不明白canWrite()的例子。复制/移动文件是否需要写入权限?我更多地指的是检查我是否有能力写入源媒体,但这可能与(1)相关。 – KaliMa
@KaliMa:“复制/移动文件需要写入权限吗?” - 您需要能够写入目标文件来获得副本。对于重命名/移动,您需要能够读取和写入原始位置和目的地。 – CommonsWare
“因许可而异。”凭什么?我指的是像(例如)android.permission.WRITE_EXTERNAL_STORAGE或android.permission.READ_EXTERNAL_STORAGE – KaliMa