2017-10-19 167 views
1

我制定了確定謀殺時間的程序。我現在所擁有的代碼完全打印出它應該給終端的內容。我希望它打印到一個文件。但是,我不應該爲此作業使用System.setOut()。我應該打印到文件而不是到終端。打印到文件而不是終端

我知道如何將一個簡單的String寫入文件,這裏的問題是我已經有方法將結果打印到終端,我不知道如何將這些方法「轉換」爲打印到文件中代替。

這是我的兩個印刷方法和主要方法:

打印二維數組方法:

public static void printArray2d(String[][] array2d){ 
    for(int i = 0; i < array2d.length; i++){ 
     for(int j = 0; j < array2d[i].length; j++){ 
      System.out.print(array2d[i][j]); 
     } 
     System.out.print("\n"); 
    } 
} 

打印完整的報告方法:

public static void printReport(String[][] array2d, double arrayMin, double arrayMax){ 
    System.out.println("Time since death probability distribution"); 
    double hours = (arrayMax-arrayMin)/(array2d.length-1); 
    System.out.printf("Each line corresponds to approximately %.2f hours\n", hours); 
    System.out.printf("%.2f hours\n", arrayMin); 
    printArray2d(array2d); 
    System.out.printf("%.2f hours\n", arrayMax); 
} 

主要方法:

public static void main(String args[]) { 

    double[] array = cooldownSamples(27, 1000); 
    double[] counts = countsFromArray(array, 20); 
    String[][] array2d = array2dFromCounts(counts); 
    printReport(array2d, minFromArray(array), maxFromArray(array)); 
} 

如果需要,我可以發佈整個代碼。

我知道有類似的問題提前問過,但沒有人給我我需要的幫助。我也沒有足夠的聲望向這些線索提供的任何答案提出後續問題,所以我不得不提出一個新問題。

在此先感謝您的幫助!

其他信息:

即使我說我不應該使用System.setOut(),我已經使用this thread給出的方法和答案試過了,沒有任何的運氣。如果最好和最有效的方法是通過System.setOut(),我很欣賞那些讓我明白如何實現這一點並使其在我的代碼中工作的答案,即使我正在尋找一種替代方法。

+0

如果'your_process'輸出到控制檯,那麼你可以很容易地用'your_process> outfile'將它打印到一個文件中。 – Seelenvirtuose

+0

我不明白。由於要求「_to打印到文件而不是打印到終端_」,因此'System.setOut()'有什麼問題? '系統。out'只是一個流,最初連接到終端,如果你將它重定向到一個文件,這將是正確的,它不會通過終端。 – AxelH

+0

您可以重定向輸出(上面建議),您可以使用System.out + System.setOut,或者您可以更改所有System.out語句以使用不同的Writer/PrintStream。 – matt

回答

1

這非常簡單:現在,您正在使用(靜態)對象System.out來執行所有打印。該對象具有打印,打印,等等的方法。

而不是使用System.out中,你創建的一個實例說,對象PrintWriter和調用方法,像

PrintWriter writer = new PrintWriter("whatever.txt"); 
writer.println("whatever"); 
writer.close(); 

這是所有有就是爲了這個。或者更簡單,你可以實例化一個PrintStream對象。那麼你可以做的事情,如:

PrintStream out = System.out // or new PrintStream("filename"); 
doStuff(out); 

...有:

public void doStuff(PrintStream out) { 
    out.println... 

現在你有,你決定,如果你要打印到System.out一個集中的地方 - 或者別的地方!

+0

所以我可以從字面上將所有'System.out'語句改爲'writer.print'語句?如果是這樣,那麼_is_真的很簡單.. –

+0

看我的更新(關於如果你真的想使用標準輸出或文件作爲目的地使用PrintStream)。 – GhostCat

+0

非常感謝。已接受你的答案。 –