class PinrtStream
PrintStream繼承自FilterOutputStream。
其特點主要有
- PrintStream提供了多種打印方法可以對多種類型的數據值進行打印,並能夠保持數據的表示形式。
- PrintStream從不拋出IOException
- 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相比,
- 其構造方法可以使用字符輸出流
- 此類如果啓用自動刷新,它只會在調用的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"無法達到換行的作用,最後在關閉流的時候完成的刷新操作。