文件存在判断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




