我有一个应用有时需要保存文件。在写入之前,它会检查设备上的可用空间。这是我用来检查空间的代码,带有日志语句。
String state = Environment.getExternalStorageState();
Log.d("Classname", "external storage state is " + state);
File file = new File(getExternalFilesDir(null) + File.separator);
Log.d("Classname", "file exists " + file.exists());
long usableSpace = file.getUsableSpace();
Log.d("Classname", "Space available " + usableSpace);
我收到了一个错误报告,在删除其他文件后,大约 3-5 MB,在有大约 3 GB 可用空间的设备上,getUsableSpace 在尝试保存另一个文件时返回 0。
添加第一个文件前的日志:
11:21:46.879: external storage state is mounted
11:21:46.879: file exists true
11:21:46.880: Space available 3185496064
删除第一个文件后的日志,尝试添加第二个:
11:21:57.811: external storage state is mounted
11:21:57.822: file exists false
11:21:57.823: Space available 0
我的 list 中有外部存储权限,并尝试检查存储是否已挂载并在创建外部存储文件时调用 mkdir(),但错误仍然存在。我还让测试人员重新启动了设备,认为它可能刚刚进入了一种奇怪的状态。
有没有人知道为什么会发生这种情况?
最佳答案
我找到了。解决方案是删除发生的方式——如果最后一个删除的文件消失了,我正在清理 getExternalStorageDir 正在寻找的目录,所以当我尝试在它上面获取 getUsableSpace 时,该目录不存在。
关于android file.getUsableSpace 仅在删除其他文件后使用 getExternalFilesDir(null) 返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40983644/