Подтвердить что ты не робот

Как написать вывод консоли в 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");
   }
4b9b3361

Ответ 1

Вам нужно сделать что-то вроде этого:

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

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

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

Более общая версия вышесказанного:

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

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


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

Кроме того, если вы не "ведете журнал", подумайте о следующем:

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

    $ java MyApp > output.txt   
    

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

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

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

Ответ 2

Нет необходимости писать какой-либо код, только в cmd на консоли вы можете написать:

javac myFile.java
java ClassName > a.txt

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

Ответ 3

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

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

(просто идея, не полная)

Ответ 4

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

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

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

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

Это мое представление о том, что вы пытаетесь сделать, и оно отлично работает:

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

Ответ 8

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

//create a file first    
    PrintWriter outputfile = new PrintWriter(filename);
//replace your System.out.print("your output");
    outputfile.print("your output");
    outputfile.close(); 

Ответ 9

Чтобы записать вывод консоли в файл 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();
    }
}

Ответ 10

PrintWriter out = null;
try {
    out = new PrintWriter(new FileWriter("C:\\testing.txt"));
    } catch (IOException e) {
            e.printStackTrace();
    }
out.println("output");
out.close();

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

Ответ 11

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