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

11 ответов:

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

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

второе утверждение является ключевым. Он изменяет значение якобы "final"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 написано.


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

альтернативно, если вы не "регистрируетесь", то рассмотрите либо:

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

изменение System.out может вызвать неприятные сюрпризы для других код в ваш JVM, который не ожидает, что это произойдет.

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

javac myFile.java
java ClassName > a.txt

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

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

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

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

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

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 и многое другое

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

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

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

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

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

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

для записи вывода консоли в 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();
    }
}
PrintWriter out = null;
try {
    out = new PrintWriter(new FileWriter("C:\testing.txt"));
    } catch (IOException e) {
            e.printStackTrace();
    }
out.println("output");
out.close();

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

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

Comments

    Ничего не найдено.