Java 输出文件通过 BufferedWriter.newline() 方法换行的陷阱

MySQL导出数据 用Java读时一行记录的某些列出现换行导致读取到多行数据 问题分析与解决方法 背景 数据库导出到文件中的一项记录,出现了多行…… 根据主键查数据库发现,数据字段中有换行符…… 但是奇怪的事情是,我用命令:cat data.txt |wc -l查看文本行数时,只有一行 可是我拿到自己机器(Mac)用SublineText打开,发现是多行! 正文 开始关注到ASCII码中的CR(回车符)、LF(换行符) 找到问题的原因:为什么会使用命令查询行数是一行,用文本读取器打开是多行 这... 阅读详情

    最近项目中需要导出文件,其实导出文件是一个挺简单的事情。但是却遇到了很奇怪的问题。

    首先导出到文件需要用到 BufferedWriter。而换行则是通过 bw.newline() 方法,问题将出在 newline() 方法上面。

    我们看一下 newline() api:

    newLine

    public void newLine()
                 throws IOException

    Writes a line separator. The line separator string is defined by the system property line.separator, and is not necessarily a single newline ('\n') character.

    Throws:
        IOException - If an I/O error occurs


    英文本身应该没有什么难度,意思是:newLine 方法会调用系统的换行符。而这就是问题的根本。

    不同系统的换行符:

    windows -->   \r\n

    linux         -->   \r

    mac         -->   \n

    我们一般开发是在 windows 下开发,而服务器一般情况下都是 linux。

    如果我们使用 newline 函数换行,在本机测试的时候,因为是 windows 环境,换行符是 \r\n ,打开文件时候自然文件是换行处理,没有问题。

   当我们部署到服务器时候,服务器是 linux 环境,newline 读取系统换行符是 \r ,导出到文件,文件的换行符是 \r,当我们把这个文件通过浏览器下载到 windows 时候,再打开文件将会出现没有换行的问题。因为 windows 下对于 \r 的解释并不是换行符。

   所以,我们在开发时候,如果需要指定文件在某些地方换行,则不能使用 newline 方法。必须手动指定换行符:\r\n 因为按照上面列举的不同系统换行符看,如果字符串的末尾是  \r\n 在三个系统中,查看该文件,都会解释为换行。

   至此,问题分析完毕。

IO流-Buffered(缓冲流)的应用以及流的使用规律 流的使用规律: 1,明确是读操作还是写操作(数据源是当前程序或者数据目的地) 读:InputStream ,Reader 写:OutputStream,Writer 2,明确是操作字符还是操作字节:明确操作基类 读: 字节:InputStream; 字符:Reader; 写: 字节:OutputStream; 字符:Writer; 3,操作的具体介质:明确具体操作类 读: 文件: ... 阅读详情

相关推荐

蓝桥杯国赛Java真题深度解析:从解题思维到工程实践

算法竞赛不仅是编程技巧的比拼,更是系统化问题解决能力的试金石。其核心在于将现实问题抽象为可计算模型,并运用高效的数据结构与算法进行求解。这种能力在软件开发中至关重要,能帮助工程师应对复杂业务场景,优化系统性能。以蓝桥杯国赛真题为例,题目往往融合了图论、动态规划、状态压缩等多个知识点,考察选手在有限时间内的系统设计与优化能力。例如,一道典型的资源点访问问题,可以通过状态压缩动态规划(DP)结合广度优先搜索(BFS)进行高效求解,这要求选手熟练掌握位运算表示状态集合,并在状态空间中进行最优路径搜索。本文深入剖析

weixin_33766168的博客 415

JAVA BufferedWriter的newLine方法

BufferedWriter的newLine方法 BufferedWriter额外提供了一个换行方法: public void newLine():将会自动根据操作系统的不同,选择\r\n或者是\r或者是\n。 public class NewLine { public static void main(String[] args) throws IOException { FileWr...

七七的博客 7779

蓝桥杯国赛Java B组:算法竞赛核心能力与工程实践深度解析

算法竞赛是检验程序员核心能力的重要场景,其本质在于运用数据结构与算法高效解决复杂问题。从原理层面看,它考察对基础数据结构(如数组、链表、树、图)的深刻理解,以及对搜索、动态规划、贪心等经典算法范式的灵活运用。其技术价值在于,它能系统性训练逻辑抽象、问题建模和边界处理能力,这些正是解决高并发、大数据量等工程难题的思维基础。在应用场景上,竞赛中锤炼的优化意识、调试策略和模块化思维,可直接迁移至后端开发、性能调优和系统设计等实践领域。本文以蓝桥杯国赛Java B组为具体载体,深入剖析如何将竞赛中涉及的动态规划、状

weixin_30954265的博客 386

Java基础(十一)★流★线程

IO流流动的是数据。---用于传输数据的一套API---IO-> Input Output---输入输出流---当数据是从外部流向程序的时候,输入流;数据是从程序流向外部的时候,输出流。读取文件---将数据从文件读到程序中---输入流;向文件中写入数据---数据从程序流向了文件---输出流。根据数据的传输方向:输入流、输出流根据数据的传输形式:字节流、字符流 输入流输出流字节流InputSt...

SHEN_DEMO的博客 516

从jieba分词到BERT-wwm——中文自然语言处理(NLP)基础分享系列(12)

今天是本系列的最后一期,完整代码呈现Huggingface transformers平台上微调BERT-wwm-ext的过程方法。

weixin_49518391的博客 3764

有关SPSS中Fisher精确检验无法进行的解决方法(由于无法打开临时文件,因此无法进行计算)

最近在帮一个四年生完成她的毕业论文,在用SPSS进行R×C表检验的时候,发现Fisher精确检验的结果无法显示,提示为“由于无法打开临时文件,因此无法进行计算”,大概像下图一样。 (这图是从网上找的) 然...

chuyang37的博客 3万+

Java.io.BufferedWriter.newLine()方法实例

java.io.BufferedWriter.newLine()方法分离器写入到缓冲写入流。 声明 以下是声明java.io.BufferedWriter.newLine()方法: public void newLine() 参数 返回值 此方法不返回任何值。 异常 IOException-- 如果发生I/ O错误。 例子 下面的示例演示java.io.BufferedWriter.newLine()方法的用法。 package com.yiibai; impor..

wuxiaopengnihao1的博客 640

Win10如何使用BC3.1精简版

Win10如何使用BC3.1精简版 使用Borland C++3.1 学习μC/OS—Ⅱ几乎是现在的普遍做法,但是由于Win10系统不能直接使用BC3.1,所以需要用到DOSBox。 1、解压bc3.1精简版压缩包,本文将BC3.1文件夹复制在D盘下,DOSBOX按照默认路径安装。下图为两者安装目录图示: 2、修改DOSBOX的配置文件,找到DOSBox文件安装路径,记事本方式打开DOSBox 0.74-3 Options.bat文件,在此文件末尾添加: MOUNT C D:\BC//意为把D:\BC目录

qq_45547236的博客 2377

Java BufferedWriter newLine()方法与示例

BufferedWriter类newLine()方法 (BufferedWriter Class newLine() method) newLine() method is available in java.io package. newLine()方法在java.io包中可用。 newLine() method” is responsible for the new line to the ...

cumtv80668的专栏 2759

使用BK3432芯片进行蓝牙开发的详细指南:编程手册与实际应用

BK3432是一款蓝牙4.2双模式芯片,支持蓝牙低功耗(BLE)和经典蓝牙(BR/EDR)模式。它集成了高性能的RF收发器、基带处理器、ARM9E内核、丰富的功能外设单元,并支持BLE应用的可编程协议和概要文件。蓝牙版本:4.2数据速率:最高支持2Mbps内核:ARM9ERF收发器:高性能、低功耗外设单元:包括UART、SPI、I2C、GPIO等功耗:超低功耗设计,适合电池供电的应用。

m0_57781768的博客 4448

RS485两线制接线实战:从差分信号原理到Modbus避坑指南

本文深入解析RS485两线制接线的核心原理与实战步骤。从差分信号的抗干扰机制出发,详细拆解总线规划、屏蔽层接地、终端电阻安装等关键实操细节,并针对Modbus应用中常见的信号反射、极性接反、共模干扰等问题提供系统化的排查指南与解决方案,助力工程师构建稳定可靠的工业通讯网络。

7up55的博客 734

Java文件写入4种方式原理与选型指南

文件写入是Java基础I/O的核心操作,本质涉及字符编码转换、缓冲机制、系统调用开销及资源生命周期管理。其底层原理涵盖从JVM堆内缓冲区到Linux内核write系统调用的完整链路,技术价值体现在性能优化(如BufferedWriter减少99%系统调用)、数据一致性(如force()保障刷盘)和跨平台健壮性(如Files.write()显式Charset)。典型应用场景包括日志记录、配置生成、二进制文件存储和HTTP上传处理。本文深入剖析FileWriter、BufferedWriter、FileOutp

weixin_34151004的博客 324

【Unity终极奥义】Unity打包去掉启动画面Logo,无需破解,一学就会

大家都知道Unity打包的应用在启动的时候都会有一个默认的UnityLogo。 而且这个Logo使用升级版和破解版都是可以随意清除和更换的。 但是Unity个人版是无法通过Unity的打包设置去进行更换的。 那今天就教大家一个使用个人普通版更换Unity启动画面Logo的方法!一起来看一下吧!

努力前行,总会成为自己心中的那道光 8万+

Java基础核心:逻辑控制与输入输出实战要点解析

程序设计的本质,可以抽象为输入、处理和输出三个环节。在Java开发中,逻辑控制(if/else、switch、for、while)与输入输出(System.in/out、Scanner、文件读写)正是支撑这一闭环的两大基石。理解条件判断与循环机制,能够让程序具备决策和重复执行的能力;掌握控制台与文件的IO操作,则能实现数据与外界的高效流通。无论是初学者系统梳理JavaSE知识,还是开发者准备面试复盘,这两块内容都值得重新审视。从分支与循环的选用,到Scanner的常见坑、文件读写的编码问题,再到结合猜数字游

weixin_33766805的博客 174

【2026最新版】python点云处理算法汇总(长期更新版)

python点云处理算法整理。博客长期更新,最近一次更新时间为:2026年10月4日。

点云侠的博客 42万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java字符流FileReader与FileWriter详解:编码、缓冲与避坑指南

在Java IO中,字符流通过Reader和Writer处理16位字符,自动处理编码转换,而字节流处理原始字节。字符节点流FileReader和FileWriter直接连接文件,但使用平台默认编码,跨平台时易乱码,需用InputStreamReader和OutputStreamWriter显式指定编码。通过BufferedReader和BufferedWriter包装,可减少系统调用,提升性能。字符流适用于文本文件读写,能避免手动编码错误,广泛应用于日志记录、配置文件解析等场景。本文深入讲解FileRead

weixin_33860528的博客 374

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Java字符流FileReader与FileWriter详解:编码、缓冲与实战避坑

在Java IO中,字符流通过字符集编解码实现字节与字符的转换,是处理文本数据的基础。其核心原理在于依赖Charset将磁盘字节解码为内存字符,确保中文等多字节字符正确读写。技术价值在于避免乱码、提升文本处理效率,并支持流式读写大文件。典型应用场景包括日志清洗、文件复制、数据转换等。FileReader和FileWriter作为节点字符流,直接操作文件,但需注意编码一致性和资源关闭。理解其机制,能有效规避乱码、文件占用等常见问题,为升级到缓冲流奠定基础。

weixin_34234829的博客 355

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Java异常处理中的安全陷阱与防御实践

异常处理是编程中的基础概念,用于捕获和管理程序运行时的错误。其核心原理是通过try-catch-finally等机制控制非正常流程,确保程序健壮性。从安全视角看,不当的异常处理会带来严重技术风险,例如异常信息过度暴露可能导致敏感数据泄露,成为攻击者进行信息收集的入口;资源未正确释放则可能引发资源耗尽,造成拒绝服务攻击。在实际的工程实践中,尤其在Java Web开发领域,必须将安全性融入异常处理机制。这包括对异常信息进行分层处理与脱敏,防止堆栈跟踪等调试信息泄露系统内部结构;利用try-with-resour

weixin_34297704的博客 531

Java IO全解:从字节流、字符流到NIO,搞懂数据流动与编码陷阱

程序中的数据读写本质上是从数据源到程序的字节流动。Java IO体系以InputStream/OutputStream为字节管道,Reader/Writer则负责字符解码。理解装饰器模式后,才能明白BufferedInputStream等处理流为何层层嵌套。字符编码是乱码根源,UTF-8与GBK差异导致中文读取出错,应显式指定字符集。缓冲区能减少系统调用次数,显著提升文件写入性能。对于高并发网络场景,BIO的线程阻塞成为瓶颈,NIO通过Selector实现单线程多连接管理。掌握这些基础原理,再配合try-w

weixin_33600816的博客 173

Java文件操作核心技术解析与实战技巧

文件操作是软件开发中的基础功能,Java通过IO和NIO两套API提供了完整的文件处理能力。从技术原理看,Java文件操作涉及字节流/字符流转换、缓冲区优化、内存映射等核心机制,直接影响系统性能和资源利用率。在实际工程中,正确处理文件路径分隔符、大文件分块读取、临时文件管理等场景尤为关键,特别是跨平台兼容性和并发安全等问题需要特别关注。本文以Java文件路径处理、高效读写策略、文件锁机制等高频技术点为切入点,结合日志轮转、配置热加载等典型应用场景,深入解析文件操作的最佳实践方案。

weixin_34221276的博客 362

AI Agent 架构里的隐形杀手:MCP 协议下 ProcessBuilder 的 64KB 死锁陷阱与 TaoToken 配置排查

Java AI Agent 通过 MCP 协议调用子进程时,ProcessBuilder 的 64KB 管道缓冲区常引发双向死锁,主线程卡在 writeBytes 且无读取线程。本文给出异步抽干流、redirectErrorStream 与 flush 的可复制代码,并附 TaoToken 统一 Key 通道的 settings.json 与 config.toml 骨架配置,官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 可查接入细节。

weixin_42602241的博客 64

蓝桥杯Java选手如何高效利用C++题单:算法迁移与实战解析

算法竞赛的核心在于算法思想与解题逻辑,而非特定编程语言的语法细节。动态规划、贪心算法、搜索剪枝等核心思想具有普适性,其状态定义、策略证明与逻辑框架与语言无关。掌握这些基础算法原理,对于解决各类计算问题、优化程序性能具有重要价值,广泛应用于数据处理、系统优化和人工智能等领域。在蓝桥杯等算法竞赛中,选手常需借鉴不同语言社区的优质资源,例如将流传更广的C++题解思路迁移至Java实现。这一过程的关键在于理解算法内核,而非逐行翻译代码。通过剖析高僧斗法等经典博弈论问题,可以深入理解尼姆博弈的变形与异或运算的应用;而

weixin_33836874的博客 379

蓝桥杯国赛Java真题解析:从算法到工程实践的核心考点与避坑指南

在算法竞赛和软件开发中,深入理解数据结构与算法原理是提升代码效率的关键。以栈为例,其“后进先出”的特性使其成为处理括号匹配、表达式求值等问题的理想选择。在Java中,使用ArrayDeque实现栈操作,相比线程安全的Stack类,在单线程环境下能减少性能开销,体现了对语言底层特性的掌握。这种对性能的极致追求,直接关联到工程实践中对OutOfMemoryError等运行时异常的预防。在解决大规模数据问题时,合理选择集合框架、优化字符串拼接与I/O操作,能有效避免内存溢出和性能瓶颈。本文以蓝桥杯国赛真题为背景,

weixin_30825199的博客 337
上一篇: tomcat 服务器配置 https 双向认证
下一篇: OCX 打包 CAB 与 JS 调用详细教程
TroyLemon
博客等级 码龄16年 27粉丝 26原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值