将控制台结果写入文本文件

时间:2012-04-24 07:52:18

标签: java text-files

我编写了这段代码将二进制数据转换为ascii,现在我想将控制台结果写入文本文件output.txt。它运行但问题是它将第一行打印到控制台并开始从第二行写入输出到textfile,换句话说它跳过fisr行!

public static void main(String args[])
  {
  try{
  // Open the file that is the first 
  // command line parameter
  FileInputStream fstream = new FileInputStream("textfile.txt");
  // Get the object of DataInputStream
  DataInputStream in = new DataInputStream(fstream);
  BufferedReader br = new BufferedReader(new InputStreamReader(in));
  String strLine;
  //Read File Line By Line
  while ((strLine = br.readLine()) != null)   {

      String input = br.readLine();
            String output = "";
            for(int i = 0; i <= input.length() - 8; i+=8)
            {
                int k = Integer.parseInt(input.substring(i, i+8), 2);
                output += (char) k;
            }

                System.out.println("string: " + output);
          orgStream = System.out;
          fileStream = new PrintStream(new FileOutputStream("d:/output.txt",true));

          // Redirecting console output to file
          System.setOut(fileStream);


              } 
  //Close the input stream
  in.close();
    }catch (Exception e){//Catch exception if any
  System.err.println("Error: " + e.getMessage());
  }
  }
}

这些行负责将结果写入output.txt:

 System.out.println("string: " + output);
          orgStream = System.out;
          fileStream = new PrintStream(new FileOutputStream("d:/output.txt",true));

          // Redirecting console output to file
          System.setOut(fileStream);

如何在eclipse中保存输出才能再次使用?现在我保存在D盘

4 个答案:

答案 0 :(得分:1)

您不使用out信息流。

答案 1 :(得分:1)

这一行

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

只需将您写入System.out的任何内容重定向到FileOutputStream即可。由于您没有向System.out写任何内容,因此没有任何内容写入output.txt。

您可以简单地将输出写入您创建的PrintStream,而不是重定向System.out。因此,首先在while循环外创建PrintStream,然后在循环内部将您创建的每个字符直接写入PrintStream。无需重定向System.out或(无效地)将字符连接成String。

此外,当您完成写作时,您应该关闭()您创建的流。在开始编写更大的程序之前,这是一个很好的练习,在这些程序中,打开流可能会导致错误。

答案 2 :(得分:0)

代码
System.err.println("Error: " + e.getMessage());将写入错误流而不是输出流..

          System.setOut(out);

这里设置出流,错误的流仍默认为控制台。

答案 3 :(得分:0)

我想你需要一个

out.flush ();

最后。再看看,我知道,你永远不会写任何东西。您是否只想写Anantha建议的错误消息?

你忘记了:

System.out.println (output);