Java读取文件文本行时输出结果末尾出现null的原因排查
null值产生原因
末尾的null和文件读取过程无关,是方法返回值被二次打印导致的:
BufferedReader.readLine()读到文件末尾时,固定返回null作为读取结束的标识。你的循环里每次都会先把br.readLine()的结果赋值给line变量,再判断是否为null,当读到文件末尾触发break跳出循环时,line已经被赋值为null- 你的
readEncryptionFile()方法最后直接返回了这个line变量,而main方法中又写了System.out.println(file.readEncryptionFile()),这行代码会把方法返回的null打印到控制台,就出现了正确内容后额外多一行null的现象 - 你在循环内部已经正确打印出了文件里的
Hello World!!!,后面的null完全是main方法打印返回值产生的多余输出。
修复方法
根据你的需求二选一即可:
- 如果只是要在方法内部打印文件内容,不需要返回读取结果:把
readEncryptionFile()的返回值改成void,同时把main方法里的System.out.println(file.readEncryptionFile());改成直接调用方法file.readEncryptionFile();即可 - 如果需要拿到读取到的文件内容做后续处理:调整读取逻辑,不要把文件末尾的null作为结果返回,参考修正后的实现:
public String readEncryptionFile() { File file = new File("C:\\Test\\EncryptionFile.txt"); StringBuilder fileContent = new StringBuilder(); String line; // 标准的BufferedReader读取写法,读到null直接终止循环,不会把null赋值给返回结果 try (BufferedReader br = new BufferedReader(new FileReader(file))) { while ((line = br.readLine()) != null) { System.out.print(line); fileContent.append(line); // 如果需要保留文件原有的换行,可追加 fileContent.append(System.lineSeparator()); } } catch (IOException e) { e.printStackTrace(); } return fileContent.toString(); }
额外提醒:你代码中写入文件的路径是
C:\Users\Dell\Training\DecryptionFile.txt,读取文件的路径是C:\Test\EncryptionFile.txt,两个路径指向的不是同一个文件,测试时请确认读取的目标文件内确实存在对应内容,避免出现读不到内容的问题。
内容的提问来源于stack exchange,提问作者cherokeexxx1
相关产品推荐
相关产品推荐

