You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 13:02:33