2017-10-19 166 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

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