首页 > 作文

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

更新时间:2023-04-04 01:54:25 阅读: 评论:0

目录
java io及bufferedreader.readline()的bugio流bufferedreader.readline()方法bug源码使用bufferreader类的readline()方法注意问题一、bufferreader类的readline()方法二、datainputstream类的readutf()方法

java io及bufferedreader.readline()的bug

io流

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

bufferedreader.readline()方法bug

错误代码:

file testtxt = new file("/urs/liushihao/ideaprojects/netty_demo/src/main/resources/test.txt");file file_copy3 = new file("/urs/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.clo();        bufferedreader.clo();

原文件:

结果:

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

原因:

是代码中每次调用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;/** * @author :liushihao * @date :created in 2021/3/3 11:09 上午 * @desc :高中录取分数线2020  只要是处理纯文本数据,就优先考虑使用字符流。除此之外都使用字节流。 *    */public class fileio {    public static file testtxt = new file("/urs/liushihao/ideaprojects/netty_demo/src/main/resources/test.txt");    public static file catimg = new file("/urs/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));    }    /**     * 使用fileinputstream、fileoutputstream   与原文件一样     * 将一个文件复制一份     */    public static void  copyfile() throws exception {//        file file = new file("/urs/liushihao/ideaprojects/netty_demo/src/main/resources/test.txt");        file file_copy1 = new file("/urs/liushihao/ideaprojects/netty_demo/src/main/resources/test_copy.txt");//        file file_copy1 = new file("/urs/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.clo();        fos.clo();    }    /**     * 字符流     * 使用fileinputstream、fileoutputstream、inputstreamreader、outputstreamwriter、bufferedreader、bufferedwriter 复制文件     *     * readline() 不用while的判断只会输出一行。     */    public static void copybyreaderandwriter1() throws exception {//        file testtxt = new file("/urs/liushihao/ideaprojects/netty_demo/src/main/resources/test.txt");        file file_copy2 = new file("/urs/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.readlin学插花e()) != null){            system.out.println(line);            bufferedwriter.write(line);        }        // 注意: fis、fos要在bufferedwriter、bufferedreader关闭之后,否则会报错!        bufferedwriter.clo();        bufferedreader.clo();        fis.clo();        fos.clo();    }    /**     * 字符流     * 使用bufferedreader、bufferedwriter、filereader、filewriter复制文件     * @throws exception     */    public static void copybyreaderandwriter2() throws exception{        file file_copy3 = new file("/urs/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.clo();        bufferedreader.clo();    }}

使用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读取2022年元旦放假安排公布的必须是writeutf()写下的字符串。即dataoutputstream的 writeutf(string str)方法配套使用

以上为个人经验,希望能给大家一个参考,也希望大家多多支持www.887551.com。

本文发布于:2023-04-04 01:54:24,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/e3b4290a1edc3c49fb3be0126f7bbd2d.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:Java IO及BufferedReader.readline()出现的Bug.doc

本文 PDF 下载地址:Java IO及BufferedReader.readline()出现的Bug.pdf

标签:的是   方法   数据   字符
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图