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

Java运行报java.nio.file.NoSuchFileException无法读取Eclipse项目下input.txt问题

问题原因排查
  • 文件名输入不完整:运行时你输入的是input,但实际文件全名为input.txt,缺少后缀名导致路径匹配失败,和报错信息里的NoSuchFileException: input完全对应。
  • Eclipse运行工作目录不匹配:Eclipse执行Java代码时,默认的相对路径基准目录(工作目录)不一定是项目根目录,大概率默认设置为模块的bin目录,相对路径无法定位到根目录下的文件。
  • 原有代码存在隐患:手动切割换行符的逻辑在遇到空行时会触发StringIndexOutOfBoundsException异常,且未指定文件读写的字符编码,不同系统环境下可能出现乱码。
解决方案

1. 快速验证修复

先直接测试输入完整文件名input.txt,如果还是报错就调整Eclipse运行配置:

  • 右键你的Java类 -> 选择Run As -> Run Configurations
  • 切换到Arguments标签页
  • 找到底部的Working directory设置,选择Other,点击Workspace选中你的项目根目录,保存配置后重新运行即可。

2. 优化后代码实现

替换原有逻辑,增加后缀自动补全、路径排查打印、字符编码指定、空行兼容处理:

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.util.Scanner;

class FileOperations {

    public static void main(String[] args) throws IOException {
        Scanner input = new Scanner(System.in);
        String filename;
        System.out.print("Enter file name: ");
        filename = input.next();
        // 自动补全txt后缀,避免漏输
        if (!filename.endsWith(".txt")) {
            filename += ".txt";
        }
        // 打印实际查找的文件绝对路径,方便排查位置是否正确
        System.out.println("正在查找文件:" + Paths.get(filename).toAbsolutePath());
        
        // 直接用readAllLines读取,自动处理换行符,无需手动切割
        List<String> lines = Files.readAllLines(Paths.get(filename), StandardCharsets.UTF_8);

        int result;
        do {
            System.out.println("\n菜单:\n1. 读取并统计文件中指定字符串出现次数\n" +
                    "2. 读取并展示指定内容所在行号\n" +
                    "3. 按字母升序排序文件内容\n" +
                    "0. 退出");
            result = input.nextInt();
            input.nextLine();  // 消费输入数字后的残留换行符

            if (result == 1) {
                String pattern;
                System.out.print("输入要查找的字符串: ");
                pattern = input.nextLine();
                int counter = 0;
                for (String line : lines) {
                    counter += line.split(pattern, -1).length - 1;
                }
                if (counter > 0)
                    System.out.println("\n字符串 (" + pattern + ") 共出现 " + counter + " 次。");
                else
                    System.out.println("\n未找到字符串 (" + pattern + ") !");

            } else if (result == 2) {
                String lineContent;
                System.out.print("输入要查找的行内容: ");
                lineContent = input.nextLine();
                boolean found = false;
                for (int i = 0; i < lines.size(); i++) {
                    if (lines.get(i).equals(lineContent)) {
                        System.out.println("\n内容为 (" + lineContent + ") 的行在第 " + (i + 1) + " 行。");
                        found = true;
                        break;
                    }
                }
                if (!found) {
                    System.out.println("\n未找到内容为 (" + lineContent + ") 的行!");
                }

            } else if (result == 3) {
                // 调用JDK自带排序方法,效率高于手动实现的冒泡排序
                lines.sort(String::compareTo);
                Files.write(Paths.get(filename), lines, StandardCharsets.UTF_8);
                System.out.println("\n文件内容已按字母升序排序完成。");
            } else {
                System.out.println("\n程序已退出!");
                result = 0;
            }
        } while (result != 0);
    }
}

3. 替代实现方案

如果不想每次调整运行配置,可以直接使用绝对路径读取文件,比如文件存放在D:\eclipse-workspace\你的项目名\input.txt,运行时直接输入完整的绝对路径即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:45:02