如何用while、for等循环精简冗长难维护的Android文件判断代码?
精简重复文件路径检查代码的方案
嘿,我明白你的问题了——原来的代码重复得让人头疼,你尝试用循环精简但卡壳在不同路径对应不同处理逻辑上对吧?别急,咱们来搞定它!
你之前的思路方向是对的,但单纯遍历路径列表没法直接关联每个路径对应的do something逻辑。核心解决办法就是把路径和它对应的处理动作绑定在一起,这样循环的时候就能找到匹配的路径并执行对应操作,同时保留原代码的优先级顺序(path1→path2→path3依次检查,找到第一个存在的就停止)。
方案1:自定义类绑定路径与动作(可读性更好)
先定义一个简单的内部类,用来封装路径和对应的处理逻辑:
// 自定义内部类,绑定文件路径和对应的执行动作 private static class FileAction { String filePath; Runnable action; FileAction(String filePath, Runnable action) { this.filePath = filePath; this.action = action; } }
然后构建路径-动作列表,循环检查并执行:
// 初始化所有需要检查的路径及对应逻辑 List<FileAction> fileActionList = new ArrayList<>(); fileActionList.add(new FileAction( "/storage/Folder/" + file_name, () -> { /* do something 1 */ } )); fileActionList.add(new FileAction( Environment.getExternalStorageDirectory().getPath() + "/Folder/" + file_name, () -> { /* do something 2 */ } )); fileActionList.add(new FileAction( Environment.getExternalStorageDirectory().getPath() + "/Folder2/" + file_name, () -> { /* do something 3 */ } )); // 循环遍历检查,找到第一个存在的文件就执行对应动作 boolean fileFound = false; for (FileAction actionItem : fileActionList) { File targetFile = new File(actionItem.filePath); if (targetFile.exists()) { actionItem.action.run(); fileFound = true; break; // 找到匹配项后立即终止循环,符合原代码逻辑 } } // 所有路径都不存在时执行默认逻辑 if (!fileFound) { /* do something 4 */ }
方案2:用Android自带Pair类(更简洁)
如果不想自定义类,也可以直接用Android SDK提供的android.util.Pair来绑定路径和动作:
// 构建路径-动作对列表 List<Pair<String, Runnable>> filePairList = new ArrayList<>(); filePairList.add(new Pair<>( "/storage/Folder/" + file_name, () -> { /* do something 1 */ } )); filePairList.add(new Pair<>( Environment.getExternalStorageDirectory().getPath() + "/Folder/" + file_name, () -> { /* do something 2 */ } )); filePairList.add(new Pair<>( Environment.getExternalStorageDirectory().getPath() + "/Folder2/" + file_name, () -> { /* do something 3 */ } )); // 循环检查逻辑和方案1一致 boolean fileFound = false; for (Pair<String, Runnable> pair : filePairList) { File targetFile = new File(pair.first); if (targetFile.exists()) { pair.second.run(); fileFound = true; break; } } if (!fileFound) { /* do something 4 */ }
方案优势
- 彻底消除了重复的
new File()和exists()判断代码,结构更简洁 - 保留了原代码的优先级检查逻辑,完全符合业务需求
- 后续新增路径检查时,只需要在列表中添加一行即可,维护成本极低
内容的提问来源于stack exchange,提问作者Kenshin
相关产品推荐
相关产品推荐

