IO流--10--LineNumberReader--StringReader

LineNumberReader

在这里插入图片描述

LineNumberReader继承自BufferedReader,并且增加了下面两个功能:
  1. 获取行号:getLineNumber()
  2. 设置行号:setLineNumber()

默认情况下,线路编号从0开始。随着数据的读取,每个line terminator的数字递增,可以通过呼叫setLineNumber(int)进行更改。 但是请注意, setLineNumber(int)实际上并不改变流中的当前位置; 它只会更改getLineNumber()将返回的值

API :

在这里插入图片描述
在这里插入图片描述

案例:

文件;test.txt
在这里插入图片描述
代码

import java.io.*;

public class test02 {

    public static void main(String[] args) throws FileNotFoundException {
        FileReader fr = new FileReader("test.txt");
        LineNumberReader reader = new LineNumberReader(fr);
        String line;
        try {
            while ((line = reader.readLine()) != null) {
                //reader.setLineNumber(5);
                System.out.println(reader.getLineNumber() + ":" + line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

在这里插入图片描述

setLineNumber(int lineNumber) : 设置当前行号。

在这里插入图片描述
在这里插入图片描述

setLineNumber()能改变行号,却不能改变读的位置

skip()方法 跳过字符

InputStream 就有此方法

在这里插入图片描述
在这里插入图片描述
参数 :

  • n - 要跳过的字符数

结果 :

  • 实际跳过的字符数

异常 :

  • IOException - 如果发生I / O错误

  • IllegalArgumentException - 如果 n为负数

案例:

在这里插入图片描述

package com.cy.NIO;

import java.io.*;

public class test02 {

    public static void main(String[] args) throws FileNotFoundException {
        FileReader fr = new FileReader("test.txt");
        LineNumberReader reader = new LineNumberReader(fr);
        String line;
        try {

            while ((line = reader.readLine()) != null) {

                System.out.println(reader.getLineNumber() + ":" + line);

                reader.skip(15);

            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

在这里插入图片描述

另:

test02.txt
在这里插入图片描述

import java.io.*;

public class test02 {

    public static void main(String[] args) throws FileNotFoundException {
        FileReader fr = new FileReader("test02.txt");
        LineNumberReader reader = new LineNumberReader(fr);
        int i;
        try {

            while ((i= reader.read()) != -1) {

                reader.skip(1);

                System.out.print((char) i);

            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

在这里插入图片描述

StringReader

StringReader和StringWriter使用的场景有限,将字符串当做流输出最常见的场景是:获取freemarker或者velocity模板的数据,并当做字符串返回给前端操作。

import java.io.StringReader;
import java.io.StringWriter;

public class Test01 {
    public static void main(String[] args) {
        String str = "待到秋来九月八,我花开后百花杀!!!";


        try {
            StringReader sr = new StringReader(str);
            StringWriter sw = new StringWriter();
            int c = -1;
            while ((c = sr.read()) != -1) {
                sw.write(c);
            }
            sw.close(); // 空方法
            System.out.println(sw.getBuffer().toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在这里插入图片描述

import java.io.*;

public class Test01 {
    public static void main(String[] args) {
        String str = "待到秋来九月八,我花开后百花杀。\n" +
                "冲天香阵透长安,满城尽带黄金甲。";


        BufferedReader br = null;
        BufferedWriter bw = null;
        try {
            StringReader stringReader = new StringReader(str);

            br = new BufferedReader(stringReader);
            bw = new BufferedWriter(new FileWriter("1.txt"));

            String data;
            while((data = br.readLine()) != null){

                bw.write(data);//data中不包含换行符
                bw.newLine();//提供换行的操作

            }

        } catch (IOException exception) {
            exception.printStackTrace();
        } finally {

            //关闭资源
            if(bw != null){

                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(br != null){
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }

        }
        
    }
}

在这里插入图片描述
StringReader和StringWriter是Reader和Writer的装饰类,StringReader底层使用String类型的变量来存储读取的内容,StringWriter底层使用StringBuffer buf来接收数据。StringWriter写入的数据只是存在于缓存中,并不会写入实质的存储介质之中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值