[英]Java writing to File or System.out
我需要將字符寫入文件或標准輸出。 我很好奇是否可以用一種方法來完成。
現在我有這樣的事情:
OutputStream out;
if(toConsole)
out = System.out;
else
out = new FileOutputStream(file);
write(out);
}
void write (OutputStream str){
....
str.write(string);
但這是我正在使用的問題(如果“ str”是System.out)寫而不是打印? (打印java doc:“字符串是根據平台的默認字符編碼轉換為字節的”)。
可以使用相同的代碼(和相同的方法)來寫入文件和System.out嗎? (這是我的學校項目,因此我希望它是“純”的並且完全正確)
您要完成的工作是將文件輸出和控制台輸出視為相同。 這是可能的,因為System.out
是PrintStream
,並且您可以為這樣的文件創建PrintStream
。
new PrintStream(yourFile)
或在兩者之間插入BufferedOutputStream
new PrintStream(new BufferedOutputStream(new FileOutputStream(yourFile))).
請注意,這不是必需的 ,因為PrintStream
本身會緩沖其輸出 。
我將創建一個變量(全局變量或非全局變量),以表示當前輸出。 您可以根據需要使用PrintStream
, System.out
或FileOutputStream
周圍的PrintStream
。 然后,您可以將此流傳遞給write方法或直接在其上調用print方法。
優點是您無需進行大量代碼修改即可輕松切換此設置,也可以將其重定向到不希望使用的位置。 將其重定向到文件和 System.out
沒問題! 當前編寫該方法的方式不會獲得純粹的靈活性。
您可以 (不是說應該這樣做),也可以使用System.setOut
直接重定向System.out
。 但是,這是不好的樣式,因為它很不常見,並且如果其他人尚未看到對System.setOut
的調用,則可能會使其他人感到困惑。
System.out是PrintStream類型的對象。 是的,您可以寫信給
使用完全相同的方法將System.out和/或另一個文件。 只是
構造一個PrintStream對象並將其定向到您的文件。 所以聲明
將out變量作為PrintStream開始。
也可以看看:
http://docs.oracle.com/javase/7/docs/api/java/lang/System.html
http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.