File.exists()在Android设备上不可靠?

时间:2017-11-01 02:05:16

标签: android

最近,我在下面的代码中收到了几个异常日志:

if(apk != null && !apk.exists()) {
  throw new Exception("xxxxxx");
}

apk文件是从cdn server下载的:

download(url, new Listener(){
  public void onSuccess(File tempFile) {
    File apk = getApkFile("apkName.apk");
    renameTo(tempFile, apk); // the apk is mentioned above
  }
});

public static boolean renameTo(File source, File dest) {
        try {
            FileInputStream fis = new FileInputStream(source);
            FileOutputStream fos = new FileOutputStream(dest);
            byte[] buffer = new byte[4096 * 2];
            int len;
            while ((len = fis.read(buffer)) > 0) {
                fos.write(buffer, 0, len);
            }
            FileUtils.closeQuietly(fis);
            FileUtils.closeQuietly(fos);
            return source.delete();
        } catch (Exception e) {
        }
        return false;
}

static File getApkFile(String name) {
        File dir = new File(ContextUtil.get().getFilesDir(), DIR_PLUGIN);
        if (!dir.exists()) {
            dir.mkdir();
        }
        return new File(dir, name);
}

但是数量并不算太多,400,000多个设备中有40个,有没有人遇到过这个问题?

1 个答案:

答案 0 :(得分:0)

您的问题有树的原因。首先,您没有检查renameTo()的返回值。其次,如果renameTo()中有捕获,则不会通知用户/您自己。第三个mkdirs()可能会失败。您没有检查返回值。如果它返回false,则继续使用您的代码,就像没有发生任何事情一样。

总而言之,代码不是很强大。然后在400000设备上运行......