• java学习笔记之IO编程—打印流和BufferedReader


    1.打印流(PrintWriter)

           想要通过程序实现内容输出,其核心一定是要依靠OutputStream类,但是OutputStream类有一个最大缺点,就是这个类中的输出操作功能有限,所有的数据一定要转换为字节数组后才可以输出,当我们想要输出的数据可能是long,double,Date时就变得很麻烦,在不用java提供的PrintWriter类的情况下,我们可以自己定义功能来解决此类问题,代码如下:

    import java.io.*;
    
    public class PrintStreamDemo {
        public static void main(String[] args) throws Exception {
            // TODO Auto-generated method stub
            File file = new File("D:"+File.separator+"www.txt");
            PrintUtil pu = new PrintUtil(new FileOutputStream(file));
            pu.println("姓名:张伟");
            pu.print("年龄:");
            pu.println(32);
            pu.close();
        }
    }
    class PrintUtil implements AutoCloseable{//实现一些常用数据的输出
        private OutputStream output;//不管你现在如何进行输出操作,核心使用的就是OutputStream
    
        public PrintUtil(OutputStream output) {//由外部来决定输出的位置
            super();
            this.output = output;
        }
        public void print(long num) {
            this.print(String.valueOf(num));
        }
        public void println(long num) {
            this.println(String.valueOf(num));
        }
        public void print(String str) {//输出字符串
            try {
                this.output.write(str.getBytes());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        public void println(String str) {
            this.print(str+"
    ");
        }
        @Override
        public void close() throws Exception {
            // TODO Auto-generated method stub
            this.output.close();
        }
        
    }

           OutputStream是唯一可以实现输出的操作标准类,所以在整个操作中已其为核心根本,但是这个类输出的操作功能有限,所以不方便进行输出各个数据的类型,所以就为它做出一层包装类,采用的思想是“装饰设计模式”,整个操作的本质就是通过外层包装类将各种数据(long,double,Date等)转换成字符串,再通过OutputStream类进行输出。

           当然,以上的操作不需要我们自己定义,在java.io包里面就提供有打印流:PrintStream(主要操作字节流)   PrintWriter(主要操作字符流)

    PrintStream类的定义:

    public class PrintStream extends FilterOutputStream implements Appendable, Closeable

    构造方法:

    public PrintStream​(OutputStream out) 

    PrintWriter类的定义:

    public class PrintWriter extends Writer

    构造方法:

    public PrintWriter​(OutputStream out)
    public PrintWriter​(Writer out)

    代码实例:

    package IODemo;
    
    import java.io.*;
    
    public class PrintWriterDemo {
    
        public static void main(String[] args) throws Exception {
            // TODO Auto-generated method stub
            File file = new File("D:"+File.separator+"www.txt");
            PrintWriter pw = new PrintWriter(new FileOutputStream(file));
            String name = "小布";
            int age = 33;
            double salary = 15000;
            pw.printf("name:%s  age:%d  salary:%.2f", name,age,salary);
            pw.close();
        }
    
    }

    比起直接使用OutputStream类,那么使用PrintWriter PrintStream类的处理操作会更加简单。只要是进行内容输出的时候全部用打印流。

    2.BufferedReader类

           提供的是一个缓冲字符输入流的概念,也就是说利用BufferedRead类可以很好的解决输入流数据的读取问题,当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并置入缓冲区,而之后若使用read()方法,会先从缓冲区中进行读取。如果缓冲区数据不足,才会再从文件中读取,这个类在最初的时候提供的最完善的数据输入的处理。

          从标准输入流System.in中直接读取使用者输入时,使用者每输入一个字符,System.in就读取一个字符。为了能一次读取一行使用者的输入,使用了BufferedReader来对使用者输入的字符进行缓冲。readLine()方法会在读取到使用者的换行字符时,再一次将整行字符串传入。

           System.in是一个字节输入流,为了转换为字符输入流,可使用InputStreamReader将其转换为字符流,然后再使用BufferedReader为其增加缓冲功能。例如:

    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 

    BufferedReader类的定义:

    public class BufferedReader extends Reader

    构造方法:

    public BufferedReader​(Reader in)

    代码实例:

    import java.io.*;
    
    public class BufferedReaderDemo {
    
        public static void main(String[] args) throws IOException {
            // TODO Auto-generated method stub
            BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("请输您的年龄:");
            String msg = input.readLine();//接收输入信息
            if(msg.matches("\d+")) {
                int age = Integer.parseInt(msg);
                System.out.println("年龄为:"+msg);
            }else {
                System.out.println("不对");
            }
        }
    
    }

    当程序中需要用到输入数据的情况时,所有数据的类型都是通过String进行描述,这样就方便接送者进行各种处理,BufferedReader可以被Scanner替代

    注意:输出数据一定用打印流,输入数据用Scanner或BufferedReader

  • 相关阅读:
    FileReader:读取本地图片文件并显示
    uploadfy插件结合php案例
    php 生成二维码,图片上传到又拍云
    php get/post 请求(可用于请求api)获取手机号码归属地
    php中curl的详细解说
    聊聊Web App、Hybrid App与Native App的设计差异
    我的前端之路
    使用angular.js开发的一个简易todo demo
    在线个人简历(续)
    在线个人简历
  • 原文地址:https://www.cnblogs.com/wulianjie/p/12258117.html
Copyright © 2020-2023  润新知