Java程序读取TXT文件时if判断失效,如何过滤指定内容?
解决Java文件读取时过滤行逻辑失效的问题
你的过滤逻辑失效核心原因是if条件的逻辑判断错误,同时还有一处FileDialog的选择判断存在问题,具体修复方案如下:
1. 核心问题:过滤条件逻辑颠倒
当前的if条件:
if (!lineOfText.startsWith("/") && !lineOfText.startsWith("[") || lineOfText.isEmpty())
逻辑上等价于(不以/开头 且 不以[开头) 或者 (是空行),这完全违背你的需求——你需要过滤掉空行、以/或[开头的行,只保留非空且不以/、[开头的行。
正确的条件应该是:
if (!lineOfText.isEmpty() && !lineOfText.startsWith("/") && !lineOfText.startsWith("["))
该条件明确限定:只有当行不为空,同时不以/、[开头时,才执行后续的storeTool存储操作。
2. 次要问题:FileDialog选择状态判断错误
原代码中if (fileName != null)永远为true,因为FileDialog对象本身不会为空,用户取消选择时,fileName.getFile()才会返回null。因此需要修改为:
if (fileName.getFile() != null)
3. 额外优化建议
- 用完的
Scanner需及时关闭避免资源泄漏,推荐使用try-with-resources语法自动管理资源; - 内部处理单行的
lineReader也建议用同样方式管理。
修正后的完整代码
public void readToolData() { Frame myFrame = new Frame(); FileDialog fileName = new FileDialog(myFrame, "Open", FileDialog.LOAD); fileName.setDirectory("/"); fileName.setVisible(true); // 修正:判断用户是否选择了文件 if (fileName.getFile() != null) { String filePath = fileName.getDirectory() + fileName.getFile(); System.out.println("selected file:" + filePath); File fileData = new File(filePath); String typeOfData = ""; // try-with-resources自动关闭Scanner try (Scanner read = new Scanner(fileData)) { while (read.hasNextLine()) { String lineOfText = read.nextLine().trim(); System.out.println(lineOfText); // 修正过滤逻辑:只保留符合要求的行 if (!lineOfText.isEmpty() && !lineOfText.startsWith("/") && !lineOfText.startsWith("[")) { typeOfData = lineOfText; // 内部Scanner也用try-with-resources管理 try (Scanner lineReader = new Scanner(lineOfText).useDelimiter(",")) { Tool t = new Tool(); // 此处可补充从lineReader读取数据填充t的逻辑 this.storeTool(t); } } } } catch (FileNotFoundException e) { System.out.println(e.getMessage()); } } else { System.out.println("Error! No file selected!"); } }
内容的提问来源于stack exchange,提问作者unknown
相关产品推荐
相关产品推荐

