使用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__
相关产品推荐
相关产品推荐

