Как записать консольный вывод в txt файл

Я попытался записать консольный вывод в txt файл с помощью этого предложения кода (http://www.daniweb.com/forums/thread23883.html#) однако, я не был успешен. Что случилось?

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

62
задан 29 May 2013 в 22:17

11 ответов

Необходимо сделать что-то вроде этого:

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

второй оператор является ключом. Это изменяет значение, предположительно, "окончательный" System.out атрибут, чтобы быть предоставленным значением PrintStream.

существуют аналогичные методы (setIn и setErr) для изменения стандартного входа и потоков сообщений об ошибках; обратитесь к java.lang.System javadocs для деталей.

А более общая версия вышеупомянутого - это:

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

, Если append true, поток добавит в существующий файл вместо того, чтобы усечь его. Если autoflush будет true, то буфер вывода будет сброшен каждый раз, когда массив байтов записан, один из эти println, методы называют, или \n записан.

<час>

я был бы точно так же, как, чтобы добавить, что это обычно - лучшая идея использовать регистрирующуюся подсистему как [1 118] Log4j, Logback или стандартная подсистема Java java.util.logging . Они предлагают мелкомодульное управление входом через конфигурационные файлы во время выполнения, поддержку прокрутки файлов журнала, подачи к системному входу, и так далее.

, С другой стороны, если Вы не "регистрируетесь" затем, рассматривают следующее:

  • С типичными оболочками, Вы можете, перенаправляя стандартный вывод (или стандартная погрешность) в файл на командной строке; например,

    $ java MyApp > output.txt   
    

    Для получения дополнительной информации, обратитесь к учебному руководству по оболочке или ручной записи.

  • Вы могли изменить свое приложение для использования out, поток передал как параметр метода или через одиночный элемент или внедрение зависимости вместо того, чтобы писать в [1 114].

Изменение System.out может вызвать противные неожиданности для другого кода в Вашей JVM, которая не ожидает, что это произойдет. (Правильно разработанная библиотека Java избежит в зависимости от [1 116] и System.err, но Вы могли быть неудачными.)

117
ответ дан 31 October 2019 в 13:10

Нет никакой потребности написать любой код, только в cmd на консоли, которую можно записать:

javac myFile.java
java ClassName > a.txt

выходные данные хранится в a.txt файле.

31
ответ дан 31 October 2019 в 13:10

к сохраняют , консольный вывод, то есть, пишет в файл и также отобразил его на консоли, Вы могли использовать класс как:

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

и используемый в качестве в:

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

( просто идея, не завершаются )

22
ответ дан 31 October 2019 в 13:10

Создайте следующий метод:

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

(я не включал надлежащий IO, обрабатывающий в вышеупомянутый класс, и он не скомпилирует - делают это самостоятельно. Также рассмотрите конфигурирование имени файла. Отметьте "истинный" аргумент. Это означает, что файл не будет воссоздан каждый раз, когда Вы называете метод)

Затем вместо System.out.println(str) вызов Logger.log(str)

, Этот ручной подход не предпочтителен. Используйте платформу журналирования - slf4j, log4j, вход свободного городского населения , и намного больше

11
ответ дан 31 October 2019 в 13:10

В дополнение к нескольким программным обсужденным подходам другая опция состоит в том, чтобы перенаправить стандартный вывод от оболочки. Вот несколько Unix и DOS примеры.

7
ответ дан 31 October 2019 в 13:10

Можно использовать System.setOut () в начале программы для перенаправления всего вывода через System.out к собственному PrintStream.

4
ответ дан 31 October 2019 в 13:10

Это - моя идея того, что Вы пытаетесь сделать, и она хорошо работает:

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
ответ дан 31 October 2019 в 13:10

самый легкий способ записать консольный вывод в текстовый файл

//create a file first    
    PrintWriter outputfile = new PrintWriter(filename);
//replace your System.out.print("your output");
    outputfile.print("your output");
    outputfile.close(); 
2
ответ дан 31 October 2019 в 13:10

Для записи консольного вывода в 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();
    }
}

, Если Вы хотите генерировать PDF скорее затем текстовый файл Вы используете зависимость, данную ниже:

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

Для генерации PDF используйте этот код:

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
ответ дан 31 October 2019 в 13:10
PrintWriter out = null;
try {
    out = new PrintWriter(new FileWriter("C:\\testing.txt"));
    } catch (IOException e) {
            e.printStackTrace();
    }
out.println("output");
out.close();

я использую полный путь для FileWriter. Это работает на меня как очарование. Также Удостоверьтесь, что файл присутствует в месте. Еще Это бросит FileNotFoundException. Этот метод не создает новый файл в целевом месте, если файл не найден.

0
ответ дан 31 October 2019 в 13:10

В netbeans можно щелкнуть правой кнопкой по мыши и затем сохранить как .txt файл. Затем на основе созданного .txt файла можно преобразовать в файл в любом формате, который Вы хотите получить.

-1
ответ дан 31 October 2019 в 13:10

Другие вопросы по тегам:

Похожие вопросы: