JAVA——IO流 篇十(PrintStream和PrintWriter)

class PinrtStream

PrintStream繼承自FilterOutputStream
其特點主要有

  1. PrintStream提供了多種打印方法可以對多種類型的數據值進行打印,並能夠保持數據的表示形式。
  2. PrintStream從不拋出IOException
  3. PrintStream流有自動刷新機制,這意味着數據寫入此流後會自動調用flush方法

查看其構造函數可知,主要可以接收三種類型的值:

  • 字符串路徑(存儲此打印流內容的目標位置的文件名稱)
PrintStream printStream = new PrintStream("print.txt");//將打印流內容存儲在文件名爲pinrt.txt的文件中中
  • File文件(存儲此打印流內容的文件對象)
File file = new File("print.txt");
PrintStream printStream = new PrintStream(file);
  • 字節輸出流(存儲此打印流內容的輸出流對象)
PrintStream printStream = new PrintStream(System.out);
需要注意的方法:

public void write(int b);將指定的字節寫入此流
由於傳遞的參數b是int類型的,因此寫入的字節是參數b的低八位,b的高14位將被忽略。

		PrintStream printStream = new PrintStream(System.out);
		printStream.write(97);//將指定的一個字節寫入流中
		System.out.println();
		printStream.write(609);//將指定的一個字節寫入流中
		printStream.close();

輸出結果爲:
a
a

在這裏插入圖片描述
在這裏插入圖片描述

        PrintStream printStream = new PrintStream(System.out);
		printStream.print(610);//打印一個整數 其實質是 將97先變成字符保存原樣將數據打印到目的地
		printStream.close();

輸出結果爲:
610

查看其底層代碼爲:

  public void print(int i) {
        write(String.valueOf(i));
    }
  private void write(String s) {
        try {
            synchronized (this) {
                ensureOpen();
                textOut.write(s);
                textOut.flushBuffer();
                charOut.flushBuffer();
                if (autoFlush && (s.indexOf('\n') >= 0))
                    out.flush();
            }
        }
        catch (InterruptedIOException x) {
            Thread.currentThread().interrupt();
        }
        catch (IOException x) {
            trouble = true;
        }
    }

其他的打印方法和上述過程一樣
此類也具有flush()方法,這是因爲其構造方法具有boolean autoFlush參數,用於設置是否自動刷新

class PrintWriter

PrintWriter類實現PrintStream的所有打印方法
PrintStream相比,

  1. 其構造方法可以使用字符輸出流
  2. 此類如果啓用自動刷新,它只會在調用的println,printf,或format方法來完成
printWriter.println(readlineString.toUpperCase());
printWriter.print(readlineString.toUpperCase()+"\r\n");
這兩句話的效果完全不同,此處不能通過換行符來完成自動刷新的效果
	//獲取鍵盤輸入流
		InputStream in = System.in;
		//將字節流轉換成字符流
		InputStreamReader bufferedInputStream = new InputStreamReader(in);
		//創建字符流緩衝對象
		BufferedReader bufferedReader = new BufferedReader(bufferedInputStream);
		//創建字符打印流對象  true參數 相當於 printWriter.flush();
		PrintWriter printWriter = new PrintWriter(System.out, true);
		//將輸出內容寫入文件,並且自動刷新
		//PrintWriter printWriter = new PrintWriter(new FileWriter("out.txt"), true);
		String readlineString;
		while((readlineString = bufferedReader.readLine()) != null) 
		{
			if("over".equals(readlineString)) 
			{
				break;
			}
			printWriter.println(readlineString.toUpperCase());
		}
		
		printWriter.close();
		bufferedReader.close();

執行結果:
woshi
WOSHI
wahaha
WAHAHA

當使用printWriter.print(readlineString.toUpperCase()+"\r\n");替換printWriter.println(readlineString.toUpperCase());
輸出結果:
woshi
wahaha
over
WOSHI
WAHAHA

說明通過"\r\n"無法達到換行的作用,最後在關閉流的時候完成的刷新操作。

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