zoukankan      html  css  js  c++  java
  • 黑马程序员JAVA高级视频_IO输入与输出19天6(LineNumberReader与自定义LineNumberReader)

    package string.test;
    
    import java.io.BufferedWriter;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.LineNumberReader;
    import java.io.Reader;
    
    /*
     * LineNumberReader 
     *     跟踪行号的缓冲字符输入流。此类定义了方法 setLineNumber(int) 和 getLineNumber(),它们可分别用于设置和获取当前行号。
     */
    public class LineNumberReaderDemo {
        public static void main(String[] args) throws IOException {
            FileWriter fw = new FileWriter("demo.txt");
            BufferedWriter bw = new BufferedWriter(fw);
            for (int i = 0; i < 100; i++) {
                bw.write("zhangsanailisi" + i);
                bw.newLine();
                bw.flush();
            }
            FileReader fr = new FileReader("demo.txt");
            //java提供的
            /*
             * LineNumberReader lbr = new LineNumberReader(fr); String line = null;
             * while ((line = lbr.readLine()) != null) {
             * 
             * System.out.println(lbr.getLineNumber() + "." + line); } bw.close();
             * lbr.close();
             */
            //自定义的MyLineNumberDemo
            MyLineNumberDemo mln = new MyLineNumberDemo(fr);
            String line = null;
            mln.setLineNumber(800);
            while ((line = mln.myReadLine()) != null) {
                System.out.println(mln.getLineNumber()+"." + line);
            }
            bw.close();
            mln.myClose();
        }
    }
    /*
     * 自定义的LineNumberReader
     * 
     */
    class MyLineNumberDemo {
        private Reader r;
        private int lineNumber = 0;
    
        public MyLineNumberDemo(Reader r) {
            this.r = r;
        }
    
        public String myReadLine() throws IOException {
            lineNumber++;
            StringBuilder sb = new StringBuilder();
            int i = 0;
            while ((i = r.read()) != -1) {
                if (i == '\r')
                    continue;
                if (i == '\n')
                    return sb.toString();
                sb.append((char) i);
            }
            if (sb.length() != 0) {
                return sb.toString();
            }
            return null;
        }
    
        public void setLineNumber(int lineNumber) {
            this.lineNumber = lineNumber;
        }
    
        public int getLineNumber() {
            return lineNumber;
        }
    
        public void myClose() throws IOException {
            r.close();
        }
    }
  • 相关阅读:
    剑指offer——包含min函数的栈
    剑指offer——顺时针打印矩阵
    剑指offer——二叉树的镜像
    剑指offer——树的子结构
    爬虫的单线程+多任务异步协程:asyncio 3.6
    爬虫中的模拟登陆,IP代理,线程池
    爬虫-数据解析
    爬虫基础
    Markdown语法
    Git
  • 原文地址:https://www.cnblogs.com/guwenren/p/2974861.html
Copyright © 2011-2022 走看看