You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 21:06:04