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

如何让Java读取文件内容时按原换行格式返回结果?

解决文件内容读取后丢失换行的问题

这问题我之前也碰到过——原因很简单:Scanner.nextLine()方法读取每行内容时,会自动丢弃行尾的换行符,你直接把所有行拼在一起,自然就变成一整行了。给你两个实用的解决方案:

方案一:改进原有拼接逻辑(兼容低版本Java)

把原来的字符串拼接改成用StringBuilder(循环里用String拼接性能很差,因为String是不可变对象),并且每次读完一行后手动加上换行符。另外用try-with-resources语法自动管理Scanner资源,避免空指针异常和资源泄漏:

public class SwimmingWorkout implements Workout {
    @Override
    public String getWorkout() {
        File fr = new File("swimmingWorkout_beginner.txt");
        StringBuilder workoutContent = new StringBuilder();
        
        // try-with-resources会自动关闭Scanner,不用手动调用sc.close()
        try (Scanner sc = new Scanner(fr)) {
            while (sc.hasNextLine()) {
                // 读取一行后,追加系统对应的换行符
                workoutContent.append(sc.nextLine()).append(System.lineSeparator());
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        
        // 可选:trim()去掉最后一行多余的换行符,根据你的需求决定要不要加
        return workoutContent.toString().trim();
    }
}

这里用System.lineSeparator()而不是硬写"\n",是因为不同操作系统的换行符不一样(Windows是\r\n,Linux/macOS是\n),这个方法会自动适配当前系统,兼容性更好。

方案二:用Java NIO简化代码(Java 11+推荐)

如果你的项目用的是Java 11或更高版本,直接用Files.readString()方法一步到位,它会直接读取整个文件的全部内容,包括所有原有的换行符,代码简洁到离谱:

import java.nio.file.Files;
import java.nio.file.Paths;

public class SwimmingWorkout implements Workout {
    @Override
    public String getWorkout() {
        try {
            // 直接读取整个文件内容,保留所有格式
            return Files.readString(Paths.get("swimmingWorkout_beginner.txt"));
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }
}

另外提个小细节:你原来的代码有个潜在bug——如果文件找不到,sc会是null,后面的while(sc.hasNextLine())会直接抛出NullPointerException,上面两个方案都解决了这个问题。

内容的提问来源于stack exchange,提问作者Gregory

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:03:43