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

时间:2010-01-03 07:48:26

标签: java file-io console

我尝试使用此代码建议(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");
   }

11 个答案:

答案 0 :(得分:115)

你需要做这样的事情:

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

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

有类似的方法(setInsetErr)用于更改标准输入和错误流;有关详细信息,请参阅java.lang.System javadoc。

以上的更一般版本是:

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

如果appendtrue,则流将附加到现有文件而不是截断它。如果autoflushtrue,则只要写入字节数组,就会调用输出缓冲区,调用其中一个println方法,或者写入\n


我想补充一点,使用Log4jLogback或标准Java java.util.logging子系统等日志记录子系统通常更好。它们通过运行时配置文件提供细粒度的日志记录控制,支持滚动日志文件,提供系统日志记录等。

或者,如果您没有“记录”,请考虑:

  • 将标准输出重定向到命令行上的文件,或
  • 更改您的应用程序以使用作为参数传递的out流,而不是写入System.out

更改System.out可能会给JVM中的其他代码带来令人不快的意外,而这些代码并不期望会发生这种情况。

答案 1 :(得分:29)

无需在cmd中编写任何代码 在控制台上你可以写:

javac myFile.java
java ClassName > a.txt

输出数据存储在a.txt文件中。

答案 2 :(得分:21)

保留控制台输出,即写入文件并将其显示在控制台上,您可以使用如下类:

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

只是一个想法,不完整

答案 3 :(得分:11)

创建以下方法:

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处理,它不会编译 - 自己动手。还要考虑配置文件名。注意“true”参数。这意味着文件不会每次调用方法时重新创建)

然后代替System.out.println(str)来电Logger.log(str)

这种手动方法不是优选的。使用日志框架 - slf4j,log4jcommons-logging以及更多

答案 4 :(得分:7)

除了讨论的几种程序方法之外,另一种选择是从shell重定向标准输出。以下是几个UnixDOS示例。

答案 5 :(得分:4)

您可以在程序开头使用System.setOut()System.out的所有输出重定向到您自己的PrintStream

答案 6 :(得分:3)

这是我对你要做的事情的看法,它运作良好:

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

答案 7 :(得分:2)

将控制台输出写入文本文件的最简单方法是

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

答案 8 :(得分:0)

将控制台输出写入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();
    }
}

答案 9 :(得分:0)

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

我正在使用FileWriter的绝对路径。它对我来说就像一个魅力。还要确保该文件存在于该位置。否则它将抛出FileNotFoundException。如果找不到该文件,则此方法不会在目标位置创建新文件。

答案 10 :(得分:-1)

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