Как записать вывод консоли в 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");
}
11 ответов:
вам нужно сделать что-то вроде этого:
PrintStream out = new PrintStream(new FileOutputStream("output.txt")); System.setOut(out);второе утверждение является ключевым. Он изменяет значение якобы "final"
System.outатрибут должен быть предоставленным значением PrintStream.есть аналогичные методы (
setInиsetErr) для изменения стандартных потоков ввода и ошибок; см.java.lang.Systemjavadocs для детали.более общая версия выше этого:
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 и многое другое
можно использовать система.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