Java I/O流之打印流 以及 装饰者模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Coooooc/article/details/79255849

打印流

PrintStream

构造方法:

PrintStream(File file) 接收文件

PrintStream(OutputStream out) 字节输出流

PrintStream(String fileName) 文件路径

PrintWriter

构造方法:

PrintWriter(File file) 接收文件

PrintWriter(OutputStream out) 字节输出流

PrintWriter(String fileName) 文件路径

System.in 是 BufferedInputStream 缓冲输入字节流

作用 接收 键盘输入的内容

System.out 是 PrintStream 打印输出字节流

作用 输出内容到控制台

    public static void main(String[] args) throws IOException {     
        // 读取从键盘输入的数据
        InputStream in = System.in;
        int len = 0;
        StringBuilder sb = new StringBuilder();
        while (true) {
            if (sb.toString().endsWith("quit")) {
                break;
            }
            // 读取数据 拼接数据
            len = in.read();
                if (len == '\n') {
                    System.out.println(sb.toString());
                    sb.delete(0, sb.length());
                }else {
                    sb.append((char)len);
                }                   
            }
        }

    public static void main(String[] args) throws IOException {
        // 打印字节流
        File file = new File("/Users/lanou/Desktop/level/001.txt");
        PrintWriter pw = new PrintWriter(file);
        pw.print("CLANNAD");
        pw.print(200);
        pw.print(false);
        pw.flush();
        pw.close();
    }

    public static void main(String[] args) throws IOException {
        File file = new File("/Users/lanou/Desktop/level/001.txt"); 
        FileOutputStream fos = new FileOutputStream(file);
        // 创建缓冲字节输出流
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        // 创建一个打印字节流
        PrintStream ps = new PrintStream(bos);
        ps.println("CLANNAD");
        ps.print(true);
        ps.print(100);
        ps.print(3.5);
        ps.close();
    }
}

装饰者模式(设计模式)

思想: 可以通过装饰对原来的功能进行升级

装饰者模式流程:

1. 把被装饰者 写成成员变量

2. 构造方法中 给该成员变量赋值

3. 对原有功能升级

public class Demo02 {
    public static void main(String[] args) throws IOException {

        FileReader fr = new FileReader("文件路径");
        WlLineNumberReader wl = new WlLineNumberReader(fr);
        String string ="";
        while ((string = wl.wlReader()) != null) {
            System.out.println(wl.getNum() + ": " +string);
        }
        wl.myClose();

    }

    /**
     * @throws FileNotFoundException 
     * @throws IOException
     */
    public static void fun1() throws FileNotFoundException, IOException {
        FileReader reader = new FileReader("文件路径");
        LineNumberReader Line = new LineNumberReader(reader);
        String readLine = "";
        while ((readLine = Line.readLine())  != null) {
            int lineNumber = Line.getLineNumber();
            System.out.println(lineNumber +" "+ readLine);
        }
        Line.close();
    }
}

class WlLineNumberReader{
    // 把被装饰者 写成成员变量
    private Reader reader;
    private int num = 0;

    public WlLineNumberReader() {
        super();
        // TODO Auto-generated constructor stub
    }
    // 构造方法中传入被装饰者
    // 构造方法都是初始化成员变量的
    // 所以 被装饰者 应该是 本类的 成员变量
    public WlLineNumberReader(Reader reader) {
        super();
        this.reader = reader;
    }
    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    // 功能升级 从读字节 升级 到读行
    public String wlReader() throws IOException {
        num ++;
        int len = 0;
        StringBuffer buffer = new StringBuffer();
        while ((len = reader.read()) != -1) {
            if (len == '\n') {

                return buffer.toString();
            }else {
                 buffer.append((char)len);
            }
        }
        // 读完了 
        if (buffer.length() == 0) {
            return null;
        }
        return buffer.toString();
    }

    // 关闭资源
    public void myClose() throws IOException {
        reader.close();
    }
}
阅读更多

没有更多推荐了,返回首页