MySQL导出数据 用Java读时一行记录的某些列出现换行导致读取到多行数据 问题分析与解决方法

本文讲述了在处理MySQL导出的数据时,由于数据字段中存在换行符,导致Java读取时一行记录被拆分为多行的问题。通过分析ASCII码中的CR和LF,发现文本编辑器对行结束符的不同处理是关键。Java的readline方法默认考虑CR或LF作为行结束符,而实际业务只需LF。为了解决这个问题,作者尝试了多种方案,包括使用Scanner,但考虑到性能问题,最终选择复制并修改BufferedReader的源码,仅以LF作为行结束符,从而解决了问题。
摘要由CSDN通过智能技术生成

背景

数据库导出到文件中的一项记录,出现了多行……
根据主键查数据库发现,数据字段中有换行符……
但是奇怪的事情是,我用命令:cat data.txt |wc -l查看文本行数时,只有一行
可是我拿到自己机器(Mac)用SublineText打开,发现是多行!

正文

开始关注到ASCII码中的CR(回车符)、LF(换行符)

找到问题的原因:为什么会使用命令查询行数是一行,用文本读取器打开是多行

这里就是一个行尾结束符的选择问题,有几种选择:\r \n\r\n

我的SublineText文本读取器默认是按\r选择换行的

可是我数据字段本身就是多行,所以他的数据里也会有\r

然后分析,为什么我Java多出来是多行呢?

开始逐步分析,我读取文本文件用的BufferedReader类的readline方法

然后看到readline源码,我去,什么玩意,看不懂!

跑去搜索引擎找答案,

翻来覆去,找了一堆东西,其中这个说:https://segmentfault.com/a/1190000004367243

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值