Java中Scanner读取本地TXT文件中途停止的问题求助
解决Scanner读取IMDB.txt时抛出NoSuchElementException的问题
你的代码在读取本地IMDB.txt文件到第24行时抛出java.util.NoSuchElementException,但其他设备能正常运行,核心原因大概率是文件换行符差异、编码不匹配或本地文件损坏,以下是针对性解决方法:
可能原因及解决方案
1. 文件换行符格式不兼容
Windows系统默认使用\r\n作为换行符,而Unix/Linux/macOS系统使用\n。如果你的IMDB.txt是在非Windows系统生成的,Scanner在Windows环境下可能无法正确识别部分换行标记,导致提前判定文件结束。
解决步骤:
- 用记事本打开IMDB.txt,点击「文件」→「另存为」
- 编码选择「UTF-8」,保存类型保持「文本文档(*.txt)」
- 覆盖原文件后重新运行程序
2. Scanner未指定文件编码
不同系统默认文件编码不同(Windows为GBK,Linux/macOS为UTF-8),若文件实际是UTF-8编码,但Scanner使用系统默认编码读取,可能会将某些字节误判为文件结束符。
修改代码:
将Scanner初始化代码改为指定UTF-8编码:
Scanner archivo = new Scanner(new File("C:\\Users\\adxlm\\Downloads\\IMDB.txt"), "UTF-8");
3. 本地文件损坏或不完整
你的IMDB.txt可能在下载、复制过程中损坏,导致第24行之后的内容丢失,而同学的文件是完整的。
解决步骤:
- 直接从同学处重新拷贝IMDB.txt文件,覆盖本地版本后测试
额外优化:避免异常的健壮写法
为了防止类似异常,建议添加文件合法性检查,并改为循环读取直到文件结束(而非固定循环100次):
package lab07; import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class Rankings { public static void main(String[] args) throws FileNotFoundException { Scanner input = new Scanner(System.in); File imdbFile = new File("C:\\Users\\adxlm\\Downloads\\IMDB.txt"); // 检查文件是否存在且可读 if (!imdbFile.exists() || !imdbFile.canRead()) { System.out.println("文件不存在或无法读取"); input.close(); return; } Scanner archivo = new Scanner(imdbFile, "UTF-8"); System.out.print("Enter the quantity of rankings: "); // int nrorankings = input.nextInt(); int lineCount = 0; // 循环读取最多100行,或直到文件结束 while (archivo.hasNextLine() && lineCount < 100) { System.out.println(archivo.nextLine()); lineCount++; } // 关闭资源 archivo.close(); input.close(); } }
内容的提问来源于stack exchange,提问作者Adaxil
相关产品推荐
相关产品推荐

