iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java IO及BufferedReader.readline()出现的Bug
  • 123
分享到

Java IO及BufferedReader.readline()出现的Bug

2024-04-02 19:04:59 123人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录Java io及BufferedReader.readline()的BugIO流BufferedReader.readline()方法Bug源码使用BufferReader类的r

Java IO及BufferedReader.readline()的Bug

IO流

在这里插入图片描述

:流是一组有序的,有起点和终点的字节集合,是对计算机中数据传输的总称。即数据在两个设备间的传输称为流,流的本质是数据传输

BufferedReader.readline()方法Bug

错误代码:


		File testTxt = new File("/Users/LiuShihao/ideaProjects/Netty_demo/src/main/resources/test.txt");
		File file_copy3 = new File("/Users/LiuShihao/IdeaProjects/netty_demo/src/main/resources/test_copy3.txt");
        BufferedReader bufferedReader = new BufferedReader(new FileReader(testTxt));
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file_copy3));
        //readLine() 每次读取一行
        while (bufferedReader.readLine() != null){
            System.out.println(bufferedReader.readLine());
            bufferedWriter.write(bufferedReader.readLine());
        }
        bufferedWriter.close();
        bufferedReader.close();

原文件:

在这里插入图片描述

结果:

在这里插入图片描述

结果控制台只打印了第二行,最后还报错了空指针异常

原因:

是代码中每次调用readline()方法,就会向下读取一行所以错误代码中表示的是while 判断 的第一行不为null,打印的是第二行 ,然后写入的是第三行,在次while判断的是第四行 有内容,打印的是第五行 为null,写入的是第六行也为null,就导致了空指针异常。

修改后的代码:


	 	String line;
        while ((line = bufferedReader.readLine()) != null){
            System.out.println(line);
            bufferedWriter.write(line);
        }

结果:

在这里插入图片描述

注意:只用readline()复制后的但是和原文件是不同,没有了换行符,如果需要可以在while循环体内加上/r/n

在这里插入图片描述

源码


package com.lsh.io;
import java.io.*;
import java.time.Duration;
import java.time.Instant;

public class FileIO {
    public static File testTxt = new File("/Users/LiuShihao/IdeaProjects/netty_demo/src/main/resources/test.txt");
    public static File catImg = new File("/Users/LiuShihao/IdeaProjects/netty_demo/src/main/resources/cat.jpg");
    public static void main(String[] args) throws Exception {
        Instant now = Instant.now();
        System.out.println("开始复制:"+now);
//        copyFile();
//        copyByReaderAndWriter1();
        copyByReaderAndWriter2();
        Instant end = Instant.now();
        // Duration  期间Instant          Period  时期  LocalDateTime
        System.out.println("复制完成:"+end+",耗时:"+ Duration.between(now,end));
    }
    
    public static void  copyFile() throws Exception {
//        File file = new File("/Users/LiuShihao/IdeaProjects/netty_demo/src/main/resources/test.txt");
        File file_copy1 = new File("/Users/LiuShihao/IdeaProjects/netty_demo/src/main/resources/test_copy.txt");
//        File file_copy1 = new File("/Users/LiuShihao/IdeaProjects/netty_demo/src/main/resources/cat_copy.jpg");
        FileInputStream fis = new FileInputStream(testTxt);
        FileOutputStream fos = new FileOutputStream(file_copy1);
        //byte[] bytes = new byte[1024];
        byte[] bytes = new byte[fis.available()];
        int read = fis.read(bytes);
        if (read != -1){
            fos.write(bytes);
        }
        fis.close();
        fos.close();
    }
    
    public static void copyByReaderAndWriter1() throws Exception {
//        File testTxt = new File("/Users/LiuShihao/IdeaProjects/netty_demo/src/main/resources/test.txt");
        File file_copy2 = new File("/Users/LiuShihao/IdeaProjects/netty_demo/src/main/resources/test_copy2.txt");
        FileInputStream fis = new FileInputStream(testTxt);
        FileOutputStream fos = new FileOutputStream(file_copy2);
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fis));
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(fos));
        String line;
        while ((line = bufferedReader.readLine()) != null){
            System.out.println(line);
            bufferedWriter.write(line);
        }
        // 注意: fis、fos要在bufferedWriter、bufferedReader关闭之后,否则会报错!
        bufferedWriter.close();
        bufferedReader.close();
        fis.close();
        fos.close();
    }
    
    public static void copyByReaderAndWriter2() throws Exception{
        File file_copy3 = new File("/Users/LiuShihao/IdeaProjects/netty_demo/src/main/resources/test_copy3.txt");
        BufferedReader bufferedReader = new BufferedReader(new FileReader(testTxt));
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file_copy3));
        //readLine() 每次读取一行
        String line;
        while ((line = bufferedReader.readLine()) != null){
            System.out.println(line);
            bufferedWriter.write(line);
        }
        bufferedWriter.close();
        bufferedReader.close();
    }
}

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

BufferReader类的readLine()方法

public String readLine():直到程序遇到了换行符或者是对应流的结束符,该方法才会认为读到了一行,才会结束其阻塞,让程序继续往下执行。

注意:读取到没有数据时就返回null(因为其它read()方法当读到没有数据时返回-1),而实际上readLine()是一个阻塞函数,当没有数据读取时,就一直会阻塞在那,而不是返回null。

读取一个文本行,通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。

返回:到达流末尾,就返回null。

注意:当循环读取文件内容时,循环条件的结束要注意使用正确。

错误的使用方式:


String valueString = null;
   while (bf.readLine()!=null){        //这样会造成数据丢失,因为在这里已经调用了readLine()方法,已经读取了一行,下次调用时,就会丢失一行。
        System.out.println(valueString);
}

正确的解决方法:用一个变量来接收方法的返回值


String valueString = null;
   while ((valueString=bf.readLine())!=null){     //通过变量来接收数据,避免数据丢失
        System.out.println(valueString);
}

DataInputStream类的readUTF()方法

readUTF读取的必须是writeUTF()写下的字符串。即DataOutputStream的 writeUTF(String str)方法配套使用

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Java IO及BufferedReader.readline()出现的Bug

本文链接: https://www.lsjlt.com/news/159514.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java IO及BufferedReader.readline()出现的Bug
    目录Java IO及BufferedReader.readline()的BugIO流BufferedReader.readline()方法Bug源码使用BufferReader类的r...
    99+
    2022-11-12
  • Java IO及BufferedReader.readline()出现的Bug该怎么处理
    本篇文章为大家展示了Java IO及BufferedReader.readline()出现的Bug该怎么处理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java IO及BufferedR...
    99+
    2023-06-22
  • Java并发程序出现Bug的原因是什么
    本篇内容介绍了“Java并发程序出现Bug的原因是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 可见性问题可见性是指一个线程...
    99+
    2023-06-16
  • JS字符串截取出现的bug以及解决方式
    目录前言js的字符编码使用码元截取的bug使用码点来正确截取字符串总结前言 在js中我们对字符串进行一部分截取,可以使用slice()函数截取,也可以直接用substring...
    99+
    2022-12-08
    js截取字符串的方法 javascript 字符串截取 js截取字符
  • IO流:java中解码和编码出现乱码说明及代码实现
    IO流:java中解码和编码的代码实现 一、UTF-8和GBK编码方式二、idea和eclipse的默认编码方式三、解码和编码方法四、代码实现编码解码 五、额外知识扩展 一、UTF-8...
    99+
    2023-10-18
    java IO流 解码 编码 数组 GBK UNICODE
  • java中IO的概念及使用
    本篇内容主要讲解“java中IO的概念及使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java中IO的概念及使用”吧!目录一.认识IOIO的分类IO的方式IO读写的方式IO的特性二.文件操作...
    99+
    2023-06-20
  • HTML标准下出现的bug怎么解决
    这篇文章主要讲解了“HTML标准下出现的bug怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“HTML标准下出现的bug怎么解决”吧! 1. 设置p...
    99+
    2022-10-19
  • Java NIO与IO的区别以及比较
    目录前言一、NIO的简介二、IO的传统方式三、NIO的详细介绍四. 举例说明前言 传统的socket IO中,需要为每个连接创建一个线程,当并发的连接数量非常巨大时,线程所占用的栈内...
    99+
    2022-11-13
  • Java IO中字节输入输出流的示例分析
    这篇文章主要介绍Java IO中字节输入输出流的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!讲的是字节输入输出流:InputStream、OutputSteam(下图红色长方形框内),红色椭圆框内...
    99+
    2023-06-26
  • Java字节流和字符流及IO流的总结
    目录从接收输入值说起字节流读取字符流读取Scanner 读取什么是 IO 流字节流和字符流RandomAccessFile从接收输入值说起 在日常的开发应用中,有时候需要直接接收外部...
    99+
    2022-11-12
  • Java之IO流原理及流的分类是什么
    这篇文章主要讲解了“Java之IO流原理及流的分类是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java之IO流原理及流的分类是什么”吧!一、概述I/O是Input/Output的缩写...
    99+
    2023-07-02
  • 又又叕出BUG啦!理智分析Java NIO的ByteBuffer到底有多难用
    目录一、前言二、API三、Netty 的数据容器3.1 工作原理四、内存池化五、字节级操作六、引用与释放一、前言 ByteBuf是Netty当中的最重要的工具类,它与JDK的Byte...
    99+
    2022-11-12
  • vue awesome swiper异步加载数据出现的bug问题怎么办
    这篇文章主要介绍vue awesome swiper异步加载数据出现的bug问题怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!本人第一次使用vue awesome。轮播第二次之...
    99+
    2022-10-19
  • Java IO--实现文件的加密解密
    我们知道文件存储的方式在计算机当中是以字节的方式进行存储的,可以通过对文件字节的操作来实现文件的加密。下面的例子是通过读取文件的字节,然后使字节中的每一位取反(1变0,0变1),再进行倒置,来实现加解密过程。import java...
    99+
    2021-03-16
  • Java中的IO怎么中ICPC中实现
    这篇文章将为大家详细讲解有关Java中的IO怎么中ICPC中实现,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。具体方法如下:import java.io.OutputStream;impor...
    99+
    2023-05-31
    java icpc io
  • Java类如何实现一个类的障眼法(JadClipse的bug)
    目录Java类实现一个类的障眼法Jad的bug和限制我的环境如下总结Java类实现一个类的障眼法 众所周知,Java的类只能去实现(implements)一个或多个接口,而不能去实现...
    99+
    2022-12-29
    Java类 Java类的障眼法 JadClipse bug
  • JAVA的IO流、File、字节流及字符流实例分析
    今天小编给大家分享一下JAVA的IO流、File、字节流及字符流实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。IO简...
    99+
    2023-06-30
  • nacos项目启动出现的bug Server check fail, please check server localhost ,port 9848 is available
    启动nacos的时候发现客户端报错了 [ main] c.a.n.c.remote.client.grpc.GrpcClient    : Server check fail, please check server localhost ,...
    99+
    2023-09-21
    bug java 服务器
  • Win10中Build 19041.173版本出现存储密码混乱bug的解决方法
    这篇文章主要介绍了Win10中Build 19041.173版本出现存储密码混乱bug的解决方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。大家都知道,外媒Windows ...
    99+
    2023-06-10
  • java.lang.StackOverflowError出现的原因及解决
    目录java.lang.StackOverflowError出现的原因深入理解java.lang.StackOverflowError栈的特点出现StackOverflowError...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作