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

使用Scanner从文件读取数字:为何直接传入路径无法工作?

为什么Scanner s = new Scanner(path)无法正常读取文件内容?

首先看你用于计算文件数字总和的代码:

int sum = 0;

try(Scanner s = new Scanner(new File(path)))
{
    while (s.hasNextInt())
    {
        if (s.hasNextInt())
        {
            sum += s.nextInt();
        }
        else
        {
            s.next();
        }
    }
} catch (FileNotFoundException e)
{
    e.printStackTrace();
}

System.out.println(sum);

问题出在两个Scanner构造方法的本质差异:

  • Scanner(new File(path)):这个构造方法接收File对象作为参数,它会打开并读取该路径指向的文件,将文件内容作为扫描源,按照系统默认字符编码解析其中的数字,这正是你代码需要的逻辑。
  • Scanner(path):这里的path是字符串类型,Scanner的这个构造方法是把字符串本身当作扫描输入源,而不是去解析字符串指向的文件。比如如果path是"numbers.txt",它会直接扫描"numbers.txt"这个字符串里的字符,而不是去打开这个文件读取内容,自然找不到你要计算的数字,程序也就无法正常工作。

如果想用字符串路径直接初始化Scanner读取文件,除了new Scanner(new File(path)),也可以用new Scanner(new FileInputStream(path)),或者更简洁的new Scanner(Paths.get(path))(Java 7及以上可用),核心是要让Scanner明确知道你要读取的是文件内容,而不是字符串字面量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:05:17