web-dev-qa-db-ja.com

コンソール出力をtxtファイルに書き込む方法

このコードの提案( 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");
   }
62
Jessy

このようなことをする必要があります:

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

2番目のステートメントがキーです。おそらく「最終」System.out属性の値を、指定されたPrintStream値に変更します。

標準入力およびエラーストリームを変更するための類似のメソッド(setInおよびsetErr)があります。詳細については、Java.lang.System javadocsを参照してください。

上記のより一般的なバージョンは次のとおりです。

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

appendtrueの場合、ストリームは既存のファイルを切り捨てるのではなく、既存のファイルに追加します。 autoflushtrueの場合、バイト配列が書き込まれるか、printlnメソッドの1つが呼び出されるか、\nが書き込まれるたびに、出力バッファーがフラッシュされます。


通常、 Log4jLogbackのようなロギングサブシステムを使用することをお勧めします。 または標準のJava Java.util.logging サブシステム。これらは、ランタイム構成ファイルを介したきめ細かいログ記録制御、ログファイルのローリングのサポート、システムログ記録へのフィードなどを提供します。

あるいは、「ロギング」していない場合は、次のことを考慮してください。

  • 典型的なシェルでは、標準出力(または標準エラー)をコマンドライン上のファイルにリダイレクトできます。例えば.

    $ Java MyApp > output.txt   
    

    詳細については、シェルチュートリアルまたは手動入力を参照してください。

  • System.outに書き込むのではなく、メソッドパラメーターとして、またはシングルトンまたは依存性注入を介して渡されるoutストリームを使用するようにアプリケーションを変更できます。

System.outを変更すると、JVM内の他のコードでこれが起こるとは思わない厄介な驚きが生じる可能性があります。 (適切に設計されたJavaライブラリはSystem.outSystem.errに依存することを避けますが、不運かもしれません。)

117
Stephen C

コードを書く必要はありません。コンソールのcmdで書くことができます:

javac myFile.Java
java ClassName > a.txt

出力データはa.txtファイルに保存されます。

31
ali ahmad

to preserveコンソール出力。つまり、ファイルに書き込み、コンソールに表示させるには、次のようなクラスを使用できます。

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

アイデアではなく、完全ではない

22

次のメソッドを作成します。

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 など

11
Bozho

議論されたいくつかのプログラム的アプローチに加えて、別のオプションはシェルから標準出力をリダイレクトすることです。以下にいくつかの nixDOS の例を示します。

7
trashgod

プログラムの開始時に System.setOut() を使用して、System.outを介してすべての出力を独自のPrintStreamにリダイレクトできます。

4
ZoogieZork

これはあなたがしようとしていることの私の考えであり、それはうまく動作します:

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

コンソール出力をテキストファイルに書き込む最も簡単な方法は

//create a file first    
    PrintWriter outputfile = new PrintWriter(filename);
//replace your System.out.print("your output");
    outputfile.print("your output");
    outputfile.close(); 
2
Prakash Kandel
PrintWriter out = null;
try {
    out = new PrintWriter(new FileWriter("C:\\testing.txt"));
    } catch (IOException e) {
            e.printStackTrace();
    }
out.println("output");
out.close();

FileWriterに絶対パスを使用しています。それは私にとって魅力のように働いています。また、ファイルがその場所に存在することを確認してください。それ以外の場合、FileNotFoundExceptionがスローされます。このメソッドは、ファイルが見つからない場合、ターゲットの場所に新しいファイルを作成しません。

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