如何将控制台输出写入一个txt文件

我试图使用此代码build议( http://www.daniweb.com/forums/thread23883.html# )将控制台输出写入到txt文件,但是我没有成功。 怎么了?

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

你需要做这样的事情:

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

第二个陈述是关键。 它将所谓的“final” System.out属性的值更改为提供的PrintStream值。

有类似的方法( setInsetErr )用于改变标准input和错误stream; 有关详细信息,请参阅java.lang.System javadocs。


我只想补充说,使用Log4j , Logback或标准Java java.util.logging子系统等日志子系统通常是一个更好的主意。 它们提供诸如通过运行时configuration文件的细粒度日志logging控制,对滚动日志文件的支持,对系统日志logging的馈送等。

或者,如果你正在做的不是“login”,那么考虑:

  • 将标准输出redirect到命令行上的文件,或者
  • 更改您的应用程序使用outstream作为参数,而不是写入System.out

乱搞(例如redirect) System.out可能会给您的JVM中的其他代码造成令人讨厌的意外,这并不期待这种情况发生。

无需编写任何代码,只需在控制台上的cmd中input:

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

只是一个想法,不完整

创build以下方法:

 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处理,也不会编译 – 自己动手,还要考虑configuration文件名,注意“true”参数,这意味着文件不会被重新创build每次你调用这个方法)

然后而不是System.out.println(str)调用Logger.log(str)

这种手动方法是不可取的。 使用日志框架 – slf4j, log4j , commons-logging等等

除了讨论的几种编程方法之外,另一个选项是redirectshell的标准输出。 这里有几个Unix和DOS的例子。

您可以在程序开始时使用System.setOut()将所有通过System.out输出redirect到您自己的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的绝对path。 它为我工作就像一个魅力。 另外确保该文件存在于该位置。 否则它会抛出一个FileNotFoundException。 如果找不到文件,此方法不会在目标位置创build新文件。

在NetBeans中,您可以右键单击鼠标,然后另存为.txt文件。 然后,根据创build的.txt文件,您可以将其转换为您想要获取的任何格式的文件。