java I/O———打印流

打印流解決的就是OutputStream的設計缺陷,屬於OutputStream功能的加強版。如果操作的不是二進制數據,只是想通過程序向終端目標輸出信息的話,OutputStream不是很方便,其缺點有兩個:

  1. 所有的數據必須轉換爲字節數組。
  2. 如果要輸出的是int、double等類型就不方便了

打印流概念

打印流設計的主要目的是爲了解決OutputStream的設計問題,其本質不會脫離OutputStream。

範例:自己設計一個簡單打印流

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

class PrintUtil {
    private OutputStream out ;
    // 由外部傳入要輸出的目標終端
        public PrintUtil(OutputStream out) {
            this.out = out ;
    }
    // 核心功能就一個
    public void print(String str) {
        try {
            this.out.write(str.getBytes());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public void println(String str) {
        this.print(str+"\n");
    }
    public void print(int data) {
        this.print(String.valueOf(data));
    }
    public void println(int data) {
        this.println(String.valueOf(data));
    }
    public void print(double data) {
        this.print(String.valueOf(data));
    }
    public void println(double data) {
        this.println(String.valueOf(data));
    }
    }

public class TestPrint {
    public static void main(String[] args) throws Exception {
        PrintUtil printUtil = new PrintUtil(new FileOutputStream(new
        File("/Users/yuisama/Desktop/test.txt"))) ;
        printUtil.print("姓名:") ;
        printUtil.println("fiying fish") ;
        printUtil.print("年齡:") ;
        printUtil.println(21) ;
        printUtil.print("工資: ") ;
        printUtil.println(0.0001);
    }
}

經過簡單處理之後,讓OutputStream的功能變的更加強大了,其實本質就只是對OutputStream的功能做了一個封裝而已。java提供有專門的打印流處理類:PrintStream、PrintWriter

2.使用系統提供的打印流

打印流分爲字節打印流:PrintStream、字符打印流:PrintWriter,以後使用PrintWriter機率較高。首先來觀察這兩個類的繼承結構與構造方法:

在這裏插入圖片描述

在這裏插入圖片描述

此時看上圖繼承關係我們會發現,有點像之前講過的代理設計模式,但是代理設計模式有如下特點:

  1. 代理是以接口爲使用原則的設計模式。
  2. 最終用戶可以調用的方法一定是接口定義的方法。

打印流的設計屬於裝飾設計模式:核心依然是某個類的功能,但是爲了得到更好的操作效果,讓其支持的功能更多一些

範例:使用打印流

public class TestPrint {
    public static void main(String[] args) throws Exception {
        PrintWriter printUtil = new PrintWriter(new FileOutputStream(new File("/Users/yuisama/Desktop/test.txt"))) ;
        printUtil.print("姓名:") ;
        printUtil.println("flying fish") ;
        printUtil.print("年齡:") ;
        printUtil.println(21) ;
        printUtil.print("工資: ") ;
        printUtil.println(0.00001) ;
        printUtil.close();
    }
}

以後的開發之中一定會用到打印流。

3.格式化輸出

C語言有一個printf()函數,這個函數在輸出的時候可以使用一些佔位符,例如:字符串(%s)、數字(%d)、小數(%m.nf)、字符(%c)等。從JDK1.5開始,PrintStream類中也追加了此種操作。

格式化輸出:

public PrintStream printf(String format, Object ... args)

範例:觀察格式化輸出

public class TestPrint {
    public static void main(String[] args) throws Exception {
        String name = "fiyingfish" ;
        int age = 21 ;
        double salary = 1.10000001 ;
        PrintWriter printUtil = new PrintWriter(new FileOutputStream(new
File("/Users/yuisama/Desktop/test.txt"))) ;
        printUtil.printf("姓名:%s,年齡:%d,工資:%1.2f", name,age,salary) ;
        printUtil.close();
    }
}

同時在String類中也追加有一個格式化字符串方法。

格式化字符串:

public static String format(String format, Object... args)

範例:格式化字符串

public class TestPrint {
    public static void main(String[] args) throws Exception {
        String name = "flyingfish" ;
        int age = 21 ;
        double salary = 1.1000001 ;
        String str = String.format("姓名:%s,年齡:%d,工資:%1.2f",name,age,salary,
name,age,salary) ;
            System.out.println(str);
    }
}

Ajax都是打印流支撐的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章