2017-10-19 7 views
1

J'ai créé un programme pour déterminer l'heure d'un meurtre. Le code que j'ai en ce moment imprime exactement ce qu'il devrait au terminal. Je veux l'imprimer dans un fichier. Cependant, je ne suis pas censé utiliser System.setOut() pour cette tâche. Je suis censé imprimer dans un fichier au lieu de au terminal.Impression dans un fichier plutôt que dans le terminal

Je sais comment écrire un String simple dans un fichier, le problème ici est que j'ai déjà des méthodes pour imprimer mes résultats au terminal, et je ne suis pas sûr comment je "convertis" ces méthodes dans l'impression dans un dossier au lieu.

Ce sont mes deux méthodes d'impression et la méthode principale:

impression 2d méthode de tableau:

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"); 
    } 
} 

impression à la méthode du rapport:

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); 
} 

méthode principale:

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)); 
} 

Je peux poster l'intégralité du code si nécessaire. Je sais qu'il y a des questions similaires posées plus tôt, mais aucune d'entre elles ne m'a donné l'aide dont j'avais besoin. Je n'ai pas non plus assez de réputation pour poser des questions de suivi à l'une des réponses données sur ces sujets, alors j'ai été obligé de poser une nouvelle question.

Merci d'avance pour toute aide!

Informations complémentaires:

Même si je dit que je ne suis pas censé utiliser System.setOut(), j'ai essayé d'utiliser la méthode et les réponses données dans this thread, sans aucune chance. Si la meilleure et la plus efficace est de passer par System.setOut(), j'apprécie les réponses qui me permettent de comprendre comment je peux implémenter ceci et le faire fonctionner dans mon code, même si je suis à la recherche d'une méthode alternative.

+0

Si 'your_process' imprime sur la console, vous pouvez facilement l'imprimer dans un fichier avec' your_process> outfile'. – Seelenvirtuose

+0

Je ne comprends pas. Quel est le problème avec 'System.setOut()' puisque vous êtes invité à "_pour imprimer dans un fichier au lieu du terminal_". 'Système.out' est juste un flux, à l'origine un lien vers le terminal, si vous le redirigez vers un fichier, ce serait correct, il ne passera pas à travers le terminal du tout. – AxelH

+0

Vous pouvez rediriger la sortie (suggérée ci-dessus), vous pouvez utiliser System.out + System.setOut, ou vous pouvez modifier toutes vos instructions System.out pour utiliser un autre writer/PrintStream. – matt

Répondre

1

C'est très simple: pour l'instant, vous utilisez un objet (statique) System.out pour effectuer toutes les impressions. Cet objet a des méthodes pour imprimer, println, et ainsi de suite.

Au lieu d'utiliser System.out, vous créez une instance de dire PrintWriter et la méthode d'appel sur cet objet, comme

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

C'est tout ce qu'il ya à ce sujet. Ou encore plus simple, vous pouvez instancier un objet PrintStream. Vous pouvez ensuite faire des choses telles que:

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

... avec:

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

Et maintenant vous avez un endroit central où vous avez décidé si vous voulez imprimer à System.out - ou ailleurs !

+0

Donc, je peux littéralement changer toutes mes instructions 'System.out' en instructions' writer.print'? Si oui, c'est _is_ vraiment simple .. –

+0

Voir mes mises à jour (à propos de l'utilisation de PrintStream si vous voulez utiliser stdout ou un fichier comme destination). – GhostCat

+0

Merci beaucoup. Avoir accepté votre réponse. –