Java中使用readLine()出现字符(串)丢失的问题

银河麒麟系统完美安装EasyConnect Kylin V10桌面版完美安装EasyConnect 阅读详情

     在Java基础的过程中,我们会学习到文件IO这个知识点,而综合目前的状况来看,文件IO也是很多公司笔试、面试的一个比较喜欢提到的一个知识点,相应的,许多招聘岗位也明确要求应聘者必须具备能够熟练运用像文件IO这种基础知识的能力。今天,要说的是文件IO中的一个小知识点————br.readLine()读取文件,出现整行字符丢失

     下面是一个简单的例子,如不恰当,请多多指教!!!

   当使用br.readLine()来做条件时

        

package fileIO;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;


public class FileDemo {
    public static void main(String[] args) throws IOException {
        File file=new File("F:"+File.separator+"XXX"+File.separator+"score.txt");
        InputStream in=null;
        BufferedReader br=null;
        try {
            in = new FileInputStream(file);
            br=new BufferedReader(new InputStreamReader(in, "gbk"));
            String str=null;
            //读取文件内容
            while(br.readLine()!=null) {  
              str=br.readLine();//这里写法看似没问题,实际上已经造成了结果第一行字符丢失的问题
              System.out.println(str);   
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            if(in!=null)in.close();
            if(br!=null)br.close();
        }
        
    }
}

     是什么原因造成了文本内容的第一行整行字符丢失的问题呢?其实就是这两句代码的问题

     

 //读取文件内容
while(br.readLine()!=null) {
         str=br.readLine();
         System.out.println(str);   
     }

     在while的判断条件中:    br.readLine()!=null 作为判断条件,已经进行了一次读取,所以此时br.readLine()所读取的内容就是文本文件中的第一行内容, 而紧接着循环体中,又将  str=br.readLine(),这里str的值是br.readLine()第二次执行的值,对应的也就是上次被读取行的下一行内容,当打印语句第一次输出时,输出的其实是br.readLine()第二次读取的文本内容,因此才会出现第一行整行丢失的情况。 

     将代码改成如下,就能解决该问题

//读取文件内容
while((str=br.readLine())!=null) {  //这样既是判断条件,也获取到了第一行的内容
           System.out.println(str);   //直接打印
         }

 这种问题其实并不多见,一般新手在没有仔细考虑代码逻辑的情况下可能会出现,此外br.read()等方法也会出现这种现象,原理都是一样的,写代码还是要多多细心,考虑周全!

参考文档:https://my.oschina.net/u/3624220/blog/1528602

告别低效!用ADS仿真带你一步步搭建一个两路对称Doherty功放(含设计要点) 本文详细介绍了如何使用ADS仿真工具一步步搭建两路对称Doherty功放,涵盖设计要点与优化技巧。通过解析负载调制机制、阻抗变换等核心原理,结合5G基站等应用场景,帮助工程师提升功放效率与线性度。特别针对GaN管件的Doherty功放,在3.5GHz频段实现高效性能。 阅读详情

相关推荐

长期换衣行人重识别(Long-Term Clothes-Changing Person Reid)数据集汇总

长期换衣行人重识别任务中目前常用的数据集总览目前换衣数据集的主要问题数据集换衣/总体情况集统计DeepChange(2021)LaST(2021)COCAS(2020)VC-Clothes(2020)LTCC(2020)PRCC(2019)Celebrities-reID(2019) 总览 在长期换衣行人重识别的任务当中,数据集的获取(尤其是对于学术环境下)是一个难点,主要的困难有以下几点: 采集大规模的数据集比较困难。 采集不同的衣服的数据集比较困难。 采集不同衣服不同角度的数据集比较困难。 目前也有

KingsMan666的博客 8380

[java基础复习]BufferedReader的readLine()方法读取内容,发现缺失

错误的写法: BufferedReader reader = new BufferedReader(new FileReader(file)); while (reader.readLine() != null) { String line = reader.readLine(); System.out.println("line = " + line); } 发现读取到的内容缺失了几行.

Holy1997的博客 2324

ZYNQ出现问题及解决办法汇总(一直更新)

问题目录使用软件及开发板版本一,vitis在build project时卡住。二,Could not find FPGA device on the board for connection 'Local'三,FPGA configuration failed:DONE PIN is not high四,Could not find ARM device on the board for connection 'Local' 使用软件及开发板版本 开发板:MZ7XA-7020 软件:vitis2020.2(

qq_45057368的博客 1万+

读取流的内容,首个字符不见了?数据不完整?解决

这几天大神开始教我弄安全方面的东西了,主要是数据防篡改的。今天就遇到一个很怪异的事,页面的数据流传过来,我接收到之后首个字符缺失了。123拿到却是23。记录一下今天的收获,算是收获很多的一天。

qq_42682745的博客 1477

中兴交换机配置SSH登录

SSH是在传统的Telnet协议基础上发展起来的一种安全的远程登录协议。发送和接收数据时, SSH会自动对数据进行加密及解密。相比于Telnet,SSH能防止“中间人”攻击、DNS欺骗、IP 欺骗等,无论是在认证方式或者数据传输的安全性上都有很大的提高。SSH用户认证方式有3种,分别为本地(Local)认证、RADIUS认证和TACACS+认证。以表规划数据为例,说明配置SSH登录的步骤。

才怪的博客 7922

【华为OD技术面-手撕算法代码真题】- 最长公共前缀

🌟 强烈推荐:华为OD技术面试手撕算法代码真题 🌟大家好!今天我给大家推荐一份备受赞誉的华为OD技术面试手撕算法代码真题。所有题目均为华为od实际面试过程中出现的算法代码真题。

算法大师! 4884

java网络编程 BufferedReader的readLine方法读不到数据且一直阻塞

基于Java的BIO API,实现简单的客户端和服务端通信模型,客户端使用BufferedReader的readLine方法读取System.in上的用户输入,然后通过字节输出流发送给服务端,服务端使用BufferedReader的readLine方法读取客户端的数据,进行打印;可以看到,for循环中有个条件,当读取到的字节中包含'\n' 或者 '\r'的时候,会设置eol = true,后面会根据该eol标志,return读取到的字符串,结束readLine方法;

u013771019的专栏 2637

最大面积验证码通用解法

最大面积验证码、面积验证通用解法

九月镇灵将的博客 1043

BufferedReader的readLine()方法读取不到换行和回车时会阻塞!而不是返回null!

在做一客户一线程通信的例子中见了一个大坑! 这是clientThread的里的接收客户端发来消息的一个while循环。第一次看这个循环时总觉得有问题。误以为当客户端发来一条消息时。clientThread里的这个while语句把这条消息读完之后,就会返回null,然后循环结束。那么问题来了?循环结束后,整个run()方法也就结束了。之后该线程对象就释放了?服务端是怎么做到第二次读取这个客户端发...

wdw66666的博客 5675

PyTorch强化学习实战(3)——Gymnasium API扩展功能

我们已经学习了编写智能体必需的 Gymnasium 核心功能,其余 API 功能部分虽然非必需,但能显著提升开发效率和代码整洁度。在本节中,我们简要地介绍了 Gymnasium API 的扩展功能,学习了如何以模块化的方式扩展现有环境的功能,并熟悉了使用包装器可视化智能体活动的方法。

盼小辉丶的博客 1200

Arduino开发实例-EMG 肌肉信号传感器

在医学研究中,测量肌肉的活动、收缩和扩张非常重要。 EMG 肌肉传感器测量肌肉活动并产生信号以显示扩张和收缩量。 因此,输出取决于所选肌肉的活动量。 3 绿色、红色和黄色电极连接到模块,用于传输来自肌肉运动的电信号。

视觉与物联智能 1698

Java查漏补缺

字符型常量和字符串常量的区别? 形式上: 字符常量是单引号引起的一个字符; 字符串常量是双引号引起的若干个字符 含义上: 字符常量相当于一个整型值( ASCII 值),可以参加表达式运算; 字符串常量代表一个地址值(该字符串在内存中存放位置) 占内存大小: 字符常量只占 2 个字节; 字符串常量占若干个字节 (注意: char 在 Java 中占两个字节) 9个数据类型,String是对象,不...

锅巴 381

Spatial-ORMLLM: Improve Spatial Relation Understanding in the Operating Room with Multimodal Larg...

手术室(OR)中的精准空间建模是众多临床任务的基础,可为术中感知、风险规避及手术决策提供支持。现有方法虽利用大规模多模态数据集进行 latent 空间对齐,以隐式学习空间关系,但却忽视了多模态大型语言模型(MLLM)的3D能力。然而,这种方法存在两个问题:1)手术室通常缺乏多台视频和音频传感器,多模态3D数据难以获取;2)仅依赖易获取的2D数据训练,无法捕捉复杂场景中的细粒度细节。为解决这一问题,我们提出——首个针对手术室3D空间推理的大型视觉语言模型。

UnknownBody_2的博客 592

[转]关于java中BufferedReader的read()及readLine()方法的使用心得

BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null, 但如果client的socket末经关闭就销毁, 则会产生IO异常. 正常的方法就是使用socket.close()关闭不需要的socket. 从一个有若干行的文件中依次读取各行,处理后输出,如果用以下方法,则会出现除第一行外行首字符丢失现象 String str 

xu734816038的博客 2万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

read()与readLine()方法区别

BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null, 但如果client的socket末经关闭就销毁, 则会产生IO异常. 正常的方法就是使用socket.close()关闭不需要的socket. 从一个有若干行的文件中依次读取各行,处理后输出,如果用以下方法,则会出现除第一行外行首字符丢失现象 String str = null; br=...

ZJLOVE的博客 2万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

关于java中BufferedReader的read()及readLine()方法的使用心得

关于java中BufferedReader的read()及readLine()方法的使用心得 BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null, 但如果client的socket末经关闭就销毁, 则会产生IO异常. 正常的方法就是使用socket.close()关闭不需要的socket. 从一个有若干行的文件中依次读取各行,处理后输出,如果用以下...

baidu_27101167的博客 693

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java字符流处理之while readline

BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null, 但如果client的socket末经关闭就销毁, 则会产生IO异常. 正常的方法就是使用socket.close()关闭不需要的socket. 从一个有若干行的文件中依次读取各行,处理后输出,如果用以下方法,则会出现除第一行外行首字符丢失现象 Str...

weixin_33716154的博客 1212

使用BufferReader类的readLine()方法注意问题

public  String   readLine():是读取到没有数据时就返回null(因为其它read()方法当读到没有数据时返回-1),而实际上readLine()是一个阻塞函数,当没有数据读取时,就一直会阻塞在那,而不是返回null。 读取一个文本行,通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。 返回:到达流末尾,就返回null。

qq30211478的博客 1万+

java中bufferreader_关于java中BufferedReader的read()及readLine()方法的使用心得

BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null, 但如果client的socket末经关闭就销毁, 则会产生IO异常. 正常的方法就是使用socket.close()关闭不需要的socket.从一个有若干行的文件中依次读取各行,处理后输出,如果用以下方法,则会出现除第一行外行首字符丢失现象String str = null;br=new Bu...

weixin_42393362的博客 1512

java中br.readline_Java:java中BufferedReader的read()及readLine()方法的使用心得

BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null, 但如果client的socket末经关闭就销毁, 则会产生IO异常. 正常的方法就是使用socket.close()关闭不需要的socket.从一个有若干行的文件中依次读取各行,处理后输出,如果用以下方法,则会出现除第一行外行首字符丢失现象.String str = null;br=new B...

weixin_42652674的博客 1114

Java:java中BufferedReader的read()及readLine()方法的使用心得

BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null, 但如果client的socket末经关闭就销毁, 则会产生IO异常. 正常的方法就是使用socket.close()关闭不需要的socket. 从一个有若干行的文件中依次读取各行,处理后输...

1907

java reader read_关于java中BufferedReader的read()及readLine()方法的使用心得

BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null, 但如果client的socket末经关闭就销毁, 则会产生IO异常. 正常的方法就是使用socket.close()关闭不需要的socket.从一个有若干行的文件中依次读取各行,处理后输出,如果用以下方法,则会出现除第一行外行首字符丢失现象String str = null;br=new Bu...

weixin_35747627的博客 405

java readerr_[转]关于java中BufferedReader的read()及readLine()方法的使用心得

BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null, 但如果client的socket末经关闭就销毁, 则会产生IO异常. 正常的方法就是使用socket.close()关闭不需要的socket.从一个有若干行的文件中依次读取各行,处理后输出,如果用以下方法,则会出现除第一行外行首字符丢失现象String str = null;br=new Bu...

weixin_39608301的博客 127
上一篇: 数据库事务的四大特性和隔离级别
下一篇: Android常见系统广播
AMD556
博客等级 码龄9年 2粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值