Java程序重定向TXT文件作为输入时抛出java.util.InputMismatchException异常
问题根源
你对命令行输入重定向的执行逻辑存在认知偏差,这是触发异常的直接原因:
- 代码中
StdIn.readInt()的作用是从Java进程绑定的标准输入流中读取整型值。如果程序启动后,你在控制台手动输入文件名getallen.txt,该字符串会直接被作为标准输入的首个文本token传入,程序尝试将其转为int类型时就会触发InputMismatchException,与给出的报错信息完全匹配。 - 输入重定向是操作系统层面的流绑定操作,不需要在程序运行时手动输入文件名,整个操作在启动Java程序的命令语句中完成,程序本身无需感知文件名、文件路径的存在。
正确操作步骤
- 提前确认准备工作:把存放整数内容的
getallen.txt放到编译生成Test.class的同一目录下,检查文件内容为200个用空格/换行分隔的合法整数,无其他非数字文本。 - 在命令行进入上述目录,直接执行带重定向参数的启动命令,不要等程序启动后再手动输入文件名:
Windows CMD环境下执行:java Test < getallen.txt
macOS/Linux终端环境下执行相同的启动命令:java Test < getallen.txt - 执行注意事项:如果
getallen.txt内的整数总数不足200,程序后续还会触发NoSuchElementException,需要提前核对文件内的整数数量与代码中数组长度的匹配关系。
常见认知误区
很多初学者会把重定向操作和“程序内主动读取文件名打开文件”的逻辑混淆:重定向的实现路径是操作系统将目标文件的内容直接接入程序的标准输入流,替代手动键盘输入的内容,程序保持原有的StdIn读取逻辑即可,不需要额外写代码读取文件名、构建文件输入流。
内容的提问来源于stack exchange,提问作者ide hiemstra
相关产品推荐
相关产品推荐

