zoukankan      html  css  js  c++  java
  • 毕向东_Java基础视频教程第19天_IO流(01~05)

    第19天-01-IO流(BufferedWriter)

    字符流的缓冲区
    • 缓冲区的出现提高了对数据的读写效率。
    • 对应类缓冲区要结合流才可以使用。
      • BufferedWriter
      • BufferedReader
    • 在流的基础上对流的功能进行了增强。
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
    
    /*
    缓冲区是为了提高流的操作效率而出现的,
    
    所以在创建缓冲区之前,必须要先有流对象.
    
    该缓冲区中提供了一个跨平台的换行符:newLine();
    */
    
    public class BufferedWriterDemo {
        public static void main(String[] args) throws IOException {
            FileWriter fw = new FileWriter("buf.txt");
            BufferedWriter bufw = new BufferedWriter(fw);
    
            for (int x = 1; x < 5; x++) {
                bufw.write("abcde" + x);
                bufw.newLine();
            }
    
            bufw.flush();   //记住,只要用到缓冲区,就要记得刷新
    
            bufw.close();   //关闭缓冲区,就是在关闭缓冲区中的流对象
        }
    }

    第19天-02-IO流(BufferedReader)

    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    
    /*
    字符读取流缓冲区:该缓冲区提供一个一次读一行的readLine,方便对于对文本数据的获取。
    返回包含该行内容的字符串,不包含任何行终止符。如果已达到流末尾,则返回null。
    */
    public class BufferedReaderDemo {
        public static void main(String[] args) throws IOException {
            FileReader fr = new FileReader("buf.txt");
            BufferedReader bufr = new BufferedReader(fr);
    
            String line;
            while ((line = bufr.readLine()) != null) {
                System.out.println(line);
            }
        }
    }

    第19天-03-IO流(通过缓冲区复制文本文件)

    import java.io.*;
    
    public class CopyTextByBuf {
        public static void main(String[] args) throws IOException {
            BufferedReader bufr = null;
            BufferedWriter bufw = null;
    
            try {
                bufr = new BufferedReader(new FileReader("buf.txt"));
                bufw = new BufferedWriter(new FileWriter("buf_Copy.txt"));
    
                String line;
                while ((line = bufr.readLine()) != null) {
                    bufw.write(line);
                    bufw.newLine();    //readLine()返回包含该行内容的字符串,不包含任何行终止符。所以需要插入newLine()
                    bufw.flush();
                }
            } catch (IOException e) {
                throw new RuntimeException("读写失败");
            } finally {
                try {
                    if (bufr != null) {
                        bufr.close();
                    }
                } catch (IOException e) {
                    throw new RuntimeException("读取关闭失败");
                }
    
                try {
                    if (bufw != null) {
                        bufw.close();
                    }
                } catch (IOException e) {
                    throw new RuntimeException("写入关闭失败");
                }
            }
        }
    }

    第19天-04-IO流(readLine的原理图例)

    • readLine方法的原理:无论是读取一行,或者读取多个字符,最终都是从硬盘中一个字符一个字符读取,所以最终使用的还是一次读一个字符的read()方法。

    第19天-05-IO流(MyBufferedReader)

    import java.io.FileReader;
    import java.io.IOException;
    
    /*
    明白了BufferedReader类中特有方法readLine的原理后,可以自定义一个类中包含一个功能和readLine一致的方法,来模拟一下BufferedReader
    */
    public class MyBufferedReader {
        private FileReader r;
        public MyBufferedReader(FileReader r) {
            this.r = r;
        }
    
        //可以一次读一行数据的方法
        public String myReadLine() throws IOException {
            //定义一个临时容器。原BufferedReader封装的是字符数组。为了演示方便,定义StringBuilder容器,最终返回字符串。
            StringBuilder sb = new StringBuilder();
            int ch;
            while ((ch = r.read()) != -1) {
                if (ch == '
    ') continue;
    
                if (ch == '
    ') {
                    return sb.toString();
                } else {
                    sb.append((char) ch);
                }
            }
            if (sb.length() != 0) return sb.toString();
            return null;
        }
    
        public void myClose() throws IOException {
            r.close();
        }
    }
    
    class MyBufferedReaderDemo {
        public static void main(String[] args) throws IOException {
            FileReader fr = new FileReader("buf.txt");
            MyBufferedReader myBuf = new MyBufferedReader(fr);
    
            String line;
            while ((line = myBuf.myReadLine()) != null) {
                System.out.println(line);
            }
            myBuf.myClose();
        }
    }
  • 相关阅读:
    sklearn
    Scrapy
    正则表达式re
    BeautifulSoup
    requests
    Python网络爬虫与信息提取
    Matplotlib
    Pandas
    NumPy
    制约大数据处理能力的几个问题
  • 原文地址:https://www.cnblogs.com/echo1937/p/6261713.html
Copyright © 2011-2022 走看看