web-dev-qa-db-fra.com

Comment écrire la sortie de la console dans un fichier txt

J'ai essayé d'écrire la sortie de la console dans un fichier txt en utilisant cette suggestion de code ( http://www.daniweb.com/forums/thread23883.html# ) mais je n'ai pas réussi. Qu'est-ce qui ne va pas?

try {
      //create a buffered reader that connects to the console, we use it so we can read lines
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

      //read a line from the console
      String lineFromInput = in.readLine();

      //create an print writer for writing to a file
      PrintWriter out = new PrintWriter(new FileWriter("output.txt"));

      //output to the file a line
      out.println(lineFromInput);

      //close the file (VERY IMPORTANT!)
      out.close();
   }
      catch(IOException e1) {
        System.out.println("Error during reading/writing");
   }
58
Jessy

Vous devez faire quelque chose comme ça:

PrintStream out = new PrintStream(new FileOutputStream("output.txt"));
System.setOut(out);

La deuxième déclaration est la clé. La valeur de l'attribut System.out supposé "final" devient la valeur PrintStream fournie.

Il existe des méthodes analogues (setIn et setErr) pour modifier les flux d'entrée standard et d'erreur; reportez-vous aux javadocs Java.lang.System pour plus de détails.

Une version plus générale de ce qui précède est la suivante:

PrintStream out = new PrintStream(
        new FileOutputStream("output.txt", append), autoFlush);
System.setOut(out);

Si append est true, le flux sera ajouté à un fichier existant au lieu de le tronquer. Si autoflush est true, le tampon de sortie sera vidé chaque fois qu'un tableau d'octets est écrit, l'une des méthodes println est appelée ou un \n est écrit.


J'aimerais juste ajouter qu'il est généralement préférable d'utiliser un sous-système de journalisation tel que Log4j , Logback ou le sous-système standard Java Java.util.logging . Celles-ci permettent un contrôle de la journalisation à l'aide de fichiers de configuration d'exécution, une prise en charge de la rotation des fichiers journaux, des flux vers la journalisation du système, etc.

Sinon, si vous ne vous connectez pas, considérez soit:

  • rediriger la sortie standard vers un fichier sur la ligne de commande, ou
  • changer votre application pour utiliser un flux out passé en tant que paramètre plutôt que d'écrire dans System.out.

Changer System.out peut causer de mauvaises surprises à d’autres codes de votre machine virtuelle qui ne s’attendent pas à ce que cela se produise.

113
Stephen C

Il n'est pas nécessaire d'écrire du code, juste dans cmd Sur la console, vous pouvez écrire:

javac myFile.Java
java ClassName > a.txt

Les données de sortie sont stockées dans le fichier a.txt.

27
ali ahmad

pour préserver la sortie de la console, c'est-à-dire écrire dans un fichier et l'afficher également sur la console, vous pouvez utiliser une classe comme 

    public class TeePrintStream extends PrintStream {
        private final PrintStream second;

        public TeePrintStream(OutputStream main, PrintStream second) {
            super(main);
            this.second = second;
        }

        /**
         * Closes the main stream. 
         * The second stream is just flushed but <b>not</b> closed.
         * @see Java.io.PrintStream#close()
         */
        @Override
        public void close() {
            // just for documentation
            super.close();
        }

        @Override
        public void flush() {
            super.flush();
            second.flush();
        }

        @Override
        public void write(byte[] buf, int off, int len) {
            super.write(buf, off, len);
            second.write(buf, off, len);
        }

        @Override
        public void write(int b) {
            super.write(b);
            second.write(b);
        }

        @Override
        public void write(byte[] b) throws IOException {
            super.write(b);
            second.write(b);
        }
    }

et utilisé comme dans: 

    FileOutputStream file = new FileOutputStream("test.txt");
    TeePrintStream tee = new TeePrintStream(file, System.out);
    System.setOut(tee);

( juste une idée, pas complète

21
Carlos Heuberger

Créez la méthode suivante:

public class Logger {
    public static void log(String message) { 
      PrintWriter out = new PrintWriter(new FileWriter("output.txt", true), true);
      out.write(message);
      out.close();
    }
}

(Je n'ai pas inclus le traitement approprié IO dans la classe ci-dessus et il ne compilera pas - faites-le vous-même. Pensez également à configurer le nom du fichier. Notez l'argument "true". Cela signifie que le fichier ne être recréé chaque fois que vous appelez la méthode)

Puis, au lieu de System.out.println(str), appelez Logger.log(str).

Cette approche manuelle n'est pas préférable. Utiliser un framework de journalisation - slf4j, log4j , commons-logging , et bien d’autres

10
Bozho

Outre les différentes approches programmatiques évoquées, une autre option consiste à rediriger la sortie standard de Shell. Voici plusieurs Unix et DOS exemples.

7
trashgod

Vous pouvez utiliser System.setOut () au début de votre programme pour rediriger toutes les sorties via System.out vers votre propre PrintStream.

4
ZoogieZork

Ceci est mon idée de ce que vous essayez de faire et cela fonctionne très bien:

public static void main(String[] args) throws IOException{

    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

    BufferedWriter out = new BufferedWriter(new FileWriter("c://output.txt"));
    try {
        String inputLine = null;
        do {
            inputLine=in.readLine();
            out.write(inputLine);
            out.newLine();
        } while (!inputLine.equalsIgnoreCase("eof"));
        System.out.print("Write Successful");
    } catch(IOException e1) {
        System.out.println("Error during reading/writing");
    } finally {
        out.close();
        in.close();
    }
}
3
Abhiyank

Le moyen le plus simple d'écrire la sortie de la console dans un fichier texte est 

//create a file first    
    PrintWriter outputfile = new PrintWriter(filename);
//replace your System.out.print("your output");
    outputfile.print("your output");
    outputfile.close(); 
1
Prakash Kandel
PrintWriter out = null;
try {
    out = new PrintWriter(new FileWriter("C:\\testing.txt"));
    } catch (IOException e) {
            e.printStackTrace();
    }
out.println("output");
out.close();

J'utilise un chemin absolu pour le FileWriter. Cela fonctionne pour moi comme un charme. Assurez-vous également que le fichier est présent à l'emplacement. Sinon, une exception FileNotFoundException sera lancée. Cette méthode ne crée pas de nouveau fichier à l'emplacement cible si le fichier n'est pas trouvé.

0
dhayanand baskar

Pour écrire la sortie de la console dans un fichier txt

public static void main(String[] args) {
    int i;
    List<String> ls = new ArrayList<String>();
    for (i = 1; i <= 100; i++) {
        String str = null;
        str = +i + ":-  HOW TO WRITE A CONSOLE OUTPUT IN A TEXT FILE";
        ls.add(str);
    }
    String listString = "";
    for (String s : ls) {
        listString += s + "\n";
    }
    FileWriter writer = null;
    try {
        writer = new FileWriter("final.txt");
        writer.write(listString);
        writer.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Si vous souhaitez générer le PDF plutôt que le fichier texte, vous utilisez la dépendance indiquée ci-dessous:

<dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itextpdf</artifactId>
        <version>5.0.6</version>
</dependency>

Pour générer un PDF, utilisez ce code:

public static void main(String[] args) {
    int i;
    List<String> ls = new ArrayList<String>();
    for (i = 1; i <= 100; i++) {
        String str = null;
        str = +i + ":- HOW TO WRITE A CONSOLE OUTPUT IN A PDF";
        ls.add(str);
    }
    String listString = "";

    for (String s : ls) {
        listString += s + "\n";
    }
    Document document = new Document();
    try {
        PdfWriter writer1 = PdfWriter
                .getInstance(
                        document,
                        new FileOutputStream(
                                "final_pdf.pdf"));
        document.open();
        document.add(new Paragraph(listString));
        document.close();
        writer1.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (DocumentException e) {
        e.printStackTrace();
    }
}
0
Ashish Vishnoi