在本教程中,我們將通過示例來學(xué)習(xí)Java PrintStream類及其print()和printf()方法。
java.io包的PrintStream類可用于以通常可讀的形式(文本)而不是字節(jié)寫入輸出數(shù)據(jù)。
它繼承了抽象類OutputStream。
與其他輸出流不同,PrintStream將原始數(shù)據(jù)(整數(shù),字符)轉(zhuǎn)換為文本格式而不是字節(jié)。 然后,它將格式化的數(shù)據(jù)寫入輸出流。
而且,PrintStream類不會(huì)拋出任何輸入/輸出異常。相反,我們需要使用checkError()方法來查找其中的任何錯(cuò)誤。
注意:PrintStream該類還具有自動(dòng)沖洗功能。這意味著它將在以下情況之一下強(qiáng)制輸出流將所有數(shù)據(jù)寫入目標(biāo):
如果換行符\n寫在打印流中
如果println()方法被調(diào)用
如果在打印流中寫入了字節(jié)數(shù)組
為了創(chuàng)建一個(gè)PrintStream,我們必須首先導(dǎo)入java.io.PrintStream包。導(dǎo)入包后,便可以在此處創(chuàng)建打印流。
1.使用其他輸出流
//創(chuàng)建一個(gè)FileOutputStream FileOutputStream file = new FileOutputStream(String file); //創(chuàng)建一個(gè)PrintStream PrintStream output = new PrintStream(file, autoFlush);
這里,
我們已經(jīng)創(chuàng)建了一個(gè)打印流,它將格式化數(shù)據(jù)寫入由FileOutputStream表示的文件
autoFlush是一個(gè)可選的布爾參數(shù),用于指定是否執(zhí)行自動(dòng)沖洗
2.使用文件名
//創(chuàng)建一個(gè)PrintStream PrintStream output = new PrintStream(String file, boolean autoFlush);
這里,
我們創(chuàng)建了一個(gè)打印流,它將格式化的數(shù)據(jù)寫入指定的文件
autoFlush 是一個(gè)可選的布爾參數(shù),用于指定是否執(zhí)行自動(dòng)沖洗
注意:在這兩種情況下,PrintStream都使用一些默認(rèn)的字符編碼將數(shù)據(jù)寫入文件。但是,我們也可以指定字符編碼(UTF8或UTF16)。
//使用某種字符編碼創(chuàng)建一個(gè)PrintStream PrintStream output = new PrintStream(String file, boolean autoFlush, Charset cs);
在這里,我們使用Charset該類來指定字符編碼。
PrintStream類提供各種方法,使我們能夠打印數(shù)據(jù)的輸出。
print() - 將指定的數(shù)據(jù)打印到輸出流
println() - 將數(shù)據(jù)以及末尾的換行符打印到輸出流
class Main { public static void main(String[] args) { String data = "Hello World."; System.out.print(data); } }
輸出結(jié)果
Hello World.
在上面的示例中,我們尚未創(chuàng)建打印流。但是,我們可以使用PrintStream類的print()方法。
您可能想知道這怎么可能。好吧,讓我解釋一下這里發(fā)生了什么。
注意這一行,
System.out.print(data);
這里,
System是負(fù)責(zé)執(zhí)行標(biāo)準(zhǔn)輸入/輸出操作的final類
out是在System類中聲明的PrintStream類型的類變量
現(xiàn)在,由于out是PrintStream類型的,因此我們可以使用它來調(diào)用PrintStream類的所有方法。
import java.io.PrintStream; class Main { public static void main(String[] args) { String data = "This is a text inside the file."; try { PrintStream output = new PrintStream("output.txt"); output.print(data); output.close(); } catch(Exception e) { e.getStackTrace(); } } }
在上面的示例中,我們創(chuàng)建了名為output的打印流。打印流與output.txt文件鏈接。
PrintStream output = new PrintStream("output.txt");
要將數(shù)據(jù)打印到文件,我們使用了print()方法。
在這里,當(dāng)我們運(yùn)行程序時(shí),output.txt文件將填充以下內(nèi)容。
This is a text inside the file.
printf()方法可用于打印格式化的字符串。它包含2個(gè)參數(shù):格式化的字符串和參數(shù)。例如,
printf("I am %d years old", 25);
這里,
I am %d years old - 是一個(gè)格式化字符串
%d 是格式化字符串中的整數(shù)數(shù)據(jù)
25是參數(shù)
格式化的字符串包括文本和數(shù)據(jù)。 并且,參數(shù)替換格式化字符串中的數(shù)據(jù)。
因此,將%d 替換為 25。
import java.io.PrintStream; class Main { public static void main(String[] args) { try { PrintStream output = new PrintStream("output.txt"); int age = 25; output.printf("I am %d years old.", age); output.close(); } catch(Exception e) { e.getStackTrace(); } } }
在上面的示例中,我們創(chuàng)建了名為output的打印流。打印流與文件output.txt鏈接。
PrintStream output = new PrintStream("output.txt");
要將格式化的文本打印到文件中,我們使用了printf()方法。
在這里,當(dāng)我們運(yùn)行程序時(shí),output.txt文件將填充以下內(nèi)容。
I am 25 years old.
方法 | 內(nèi)容描述 |
---|---|
close() | 關(guān)閉打印流 |
checkError() | 檢查流中是否有錯(cuò)誤,并返回布爾結(jié)果 |
append() | 將指定的數(shù)據(jù)附加到流 |