如何使用Java读取输入文件并打印完整的每行文本内容
问题原因
Scanner类的next()方法默认以所有空白字符(空格、换行符、制表符等)作为分隔符,每次只会读取到下一个空白字符前的内容,所以你现在的代码会按单词拆分读取,每次打印一个单词就换行,和原文件格式不一致。
修改方案
只需要调整循环判断和读取方法两个位置,就能实现逐行读取,保持原文件格式:
- 循环判断条件从
inFS.hasNext()改为inFS.hasNextLine(),用于判断是否还有未读取的完整行 - 内容读取方法从
inFS.next()改为inFS.nextLine(),直接读取从当前位置到行尾的所有内容(包括空格)
修改后的完整代码如下,同时补充了必要的异常捕获和资源自动关闭逻辑,避免资源泄漏:
import java.io.FileInputStream; import java.io.IOException; import java.util.Scanner; public class ReadFileByLine { public static void main(String[] args) { Scanner scnr = new Scanner(System.in); System.out.println("Enter input filename: "); String inputFile = scnr.next(); scnr.close(); // try-with-resources语法会自动关闭括号内声明的资源,无需手动写close try (FileInputStream fileByteStream = new FileInputStream(inputFile); Scanner inFS = new Scanner(fileByteStream)) { while (inFS.hasNextLine()) { String resultToPrint = inFS.nextLine(); System.out.println(resultToPrint); } } catch (IOException e) { System.out.println("文件读取出错,请检查文件路径是否正确:" + e.getMessage()); } } }
补充说明
如果你的文件存在特殊编码(比如UTF-8带BOM、GBK等),读取出现乱码的话,可以在创建Scanner的时候指定编码,比如:Scanner inFS = new Scanner(fileByteStream, "GBK")
内容的提问来源于stack exchange,提问作者Bella
相关产品推荐
相关产品推荐

