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

BlueJ环境Java文件读写提示找不到输入文件的路径问题排查

问题根因

触发文件找不到错误的核心原因是路径拼接漏了分隔符:
你定义的filePath值为C:/Users/User/OneDrive/Desktop/JavaProgram,直接拼接inputFile后得到的完整路径是C:/Users/User/OneDrive/Desktop/JavaProgrambookTitles.inp,目录和文件名中间少了/,程序自然找不到目标文件。
除此之外代码还有几个隐藏问题:

  • 你提到文件放在BlueJ同级目录,但代码硬编码了C盘绝对路径,只要BlueJ运行时的工作目录和你写的路径不匹配,就算补了分隔符也会报错
  • 重复书名统计逻辑有缺陷:同一本书出现3次及以上时,重复列表会重复存储多条相同书名
  • 流资源关闭逻辑写在try块内,一旦读文件中途抛出异常,打开的文件流无法正常释放,会造成资源泄漏
  • 存在多处拼写错误(如ouputFile应为outputFile),输出文件后缀注释和实际定义不一致,容易导致后续找错输出文件位置
修复方法
  1. 解决路径问题:如果文件确实放在BlueJ程序同级目录,直接用相对路径写文件名即可,不需要硬编码C盘绝对路径;如果要使用绝对路径,要么在filePath末尾补/,要么用File类做路径拼接,避免漏写分隔符。可以在代码开头加System.out.println(System.getProperty("user.dir"));打印程序当前工作目录,确认文件查找的基准位置。
  2. 优化重复统计逻辑:用HashMap存储每个书名的出现次数,最后筛选出现次数大于1的书名即可,不会重复记录。
  3. 用try-with-resources语法自动管理文件流,不需要手动写close方法,从语法层面避免资源泄漏。
  4. 修正拼写错误,统一输入输出文件的后缀配置。
修复后完整代码
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;

public class GenerateDuplicateBookTitle {

    public static void main(String[] args) {
        // 文件放在BlueJ同级目录时直接写文件名即可
        String inputFile = "bookTitles.inp";
        String outputFile = "duplicateTitles.inp";
        HashMap<String, Integer> bookTitleCount = new HashMap<>();

        // try-with-resources 自动关闭文件流
        try (
            FileReader fr = new FileReader(inputFile);
            BufferedReader br = new BufferedReader(fr);
            FileWriter write = new FileWriter(outputFile)
        ){
            String line;
            System.out.println("-------------- 开始读取文件 ---------------\n");
            while((line = br.readLine()) != null){
                bookTitleCount.put(line, bookTitleCount.getOrDefault(line, 0) + 1);
                System.out.println("已读取书名:" + line);
            }

            System.out.println("\n检测到的重复书名如下:");
            for(String title : bookTitleCount.keySet()){
                if(bookTitleCount.get(title) > 1){
                    System.out.println(title);
                    write.write(title + "\n");
                }
            }
            System.out.println("\n重复书名已成功写入输出文件 " + outputFile);

        }catch(FileNotFoundException e){
            System.out.println("错误:未找到输入文件 " + inputFile + ",请确认文件位于程序工作目录下");
        } catch (IOException ex) {
            System.out.println("文件操作异常:" + ex.getMessage());
        }
    }
}

排查提示:如果运行后依然提示找不到文件,先运行打印user.dir的代码看当前工作目录是什么,把输入文件放到打印出的目录下即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:39:16