You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

文件存在判断If语句始终返回false,SQLite手机文件导入异常求助

问题排查与修复方案

嘿,我一眼就看出问题出在哪了!你现在的代码逻辑完全搞反了——你判断的是外部存储根目录是否存在,而不是你要导入的那个.dat文件是否存在!

问题分析

你看这段代码:

File new_ConsumerData = new File(String.valueOf(Environment.getExternalStorageDirectory()));
String data = new_ConsumerData.toString() + "/" + ToImportConsumerFileName + ".dat";
if (!new_ConsumerData.exists()) {
    // 弹出Toast
} else {
    // 执行导入
}

这里new_ConsumerData指向的是外部存储的根目录(比如/sdcard/),这个目录几乎在所有正常设备上都是存在的,所以!new_ConsumerData.exists()永远为false,自然不会触发Toast提示。而你真正需要检查的是拼接后的data路径对应的文件是否存在。

修复后的代码

把判断对象换成目标文件就好了,同时建议直接用File的构造方法来拼接路径(比字符串拼接更安全):

// 直接创建目标文件的File对象,用父目录+文件名的构造方法更规范
File targetFile = new File(Environment.getExternalStorageDirectory(), ToImportConsumerFileName + ".dat");

if (!targetFile.exists()) {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(getApplicationContext(), "No Such File", Toast.LENGTH_LONG).show();
        }
    });
} else {
    // 执行你的importMethod导入逻辑
}

额外注意事项

  • 权限问题:如果你的App运行在Android 6.0(API 23)及以上版本,别忘了动态申请READ_EXTERNAL_STORAGE权限,否则即使文件存在,targetFile.exists()也会返回false。
  • 路径兼容性:从Android 10开始,Environment.getExternalStorageDirectory()的访问受到限制,建议改用MediaStore或者App专属的外部存储目录(getExternalFilesDir())来避免适配问题。

内容的提问来源于stack exchange,提问作者user12788347

火山引擎 最新活动