JAVA 因乱码导致的换行问题 Java读文件设置行分隔符

本文探讨了在大数据平台中,如何解决不同系统数据格式和质量的问题,特别是针对文件名关键信息的采集与处理,以及如何正确识别和处理不同操作系统的行分隔符,确保数据的准确性和完整性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于我们大数据平台需要采集各个系统数据,各个系统的数据格式和质量也参差不齐。之前我写了个通用采集程序(支持ftp,sftp,database等)
1)为了便于入库到仓库的数据进行数据源追溯;
2)部分接口文件名含有关键信息,而文件数据里又没有这些信息,需要通过截取文件名来补充该关键信息;
所以我们的采集程序需要在采集之后的文件里每行记录之后都追加文件名以及文件行号

这就不是简单的数据流Copy了。
很尴尬的是,有的文件是以\n(linux)作为行分隔符,有的文件是以\r(mac)作为行分隔符,有的文件是以\r\n(windows)作为行分隔符;
更尴尬的是,当以\n作为行分隔符时,有些数据里含有\r字符。这对上游系统来说也没毛病,但是我们处理就要小心了。

尝试使用BufferReader,LineNumberReader等设置行分隔符,但是这些都不带这么玩,不给设置。也尝试设置系统环境变量System.setProperty(“line.separator”,"\n")之后,用以上类读文件,但是还是会把\r,\r\n等识别为换行。

本人又不太想基于原始字节流读取判断,查阅各种,终于找到这个类:
java.util.Scanner,也是jdk自带的,无需额外引入包。

Scanner scan = new Scanner(inputStream,fileEncoding);
#在这里设置行分隔符,并且也支持多分隔符(正则表达式)
scan.useDelimiter("\n");
//如果想同时以\n、\r、\r\n作为行分隔符,可以这么设置
//scan.useDelimiter("\r\n|\r|\n");//注意\r\n必须在前面哦
String line = null;
for(int lnr=1;scan.hasNext();lnr++){
  line = scan.next();
  //line就是行内容,lnr 就是行号啦
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值