このコードの提案( 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);
2番目のステートメントがキーです。おそらく「最終」System.out
属性の値を、指定されたPrintStream値に変更します。
標準入力およびエラーストリームを変更するための類似のメソッド(setIn
およびsetErr
)があります。詳細については、Java.lang.System
javadocsを参照してください。
上記のより一般的なバージョンは次のとおりです。
PrintStream out = new PrintStream(
new FileOutputStream("output.txt", append), autoFlush);
System.setOut(out);
append
がtrue
の場合、ストリームは既存のファイルを切り捨てるのではなく、既存のファイルに追加します。 autoflush
がtrue
の場合、バイト配列が書き込まれるか、println
メソッドの1つが呼び出されるか、\n
が書き込まれるたびに、出力バッファーがフラッシュされます。
通常、 Log4j 、 Logbackのようなロギングサブシステムを使用することをお勧めします。 または標準のJava Java.util.logging サブシステム。これらは、ランタイム構成ファイルを介したきめ細かいログ記録制御、ログファイルのローリングのサポート、システムログ記録へのフィードなどを提供します。
あるいは、「ロギング」していない場合は、次のことを考慮してください。
典型的なシェルでは、標準出力(または標準エラー)をコマンドライン上のファイルにリダイレクトできます。例えば.
$ Java MyApp > output.txt
詳細については、シェルチュートリアルまたは手動入力を参照してください。
System.out
に書き込むのではなく、メソッドパラメーターとして、またはシングルトンまたは依存性注入を介して渡されるout
ストリームを使用するようにアプリケーションを変更できます。
System.out
を変更すると、JVM内の他のコードでこれが起こるとは思わない厄介な驚きが生じる可能性があります。 (適切に設計されたJavaライブラリはSystem.out
とSystem.err
に依存することを避けますが、不運かもしれません。)
コードを書く必要はありません。コンソールのcmdで書くことができます:
javac myFile.Java
java ClassName > a.txt
出力データはa.txtファイルに保存されます。
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);
(アイデアではなく、完全ではない)
次のメソッドを作成します。
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、 log4j 、 commons-logging など
プログラムの開始時に System.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();
PrintWriter out = null;
try {
out = new PrintWriter(new FileWriter("C:\\testing.txt"));
} catch (IOException e) {
e.printStackTrace();
}
out.println("output");
out.close();
FileWriterに絶対パスを使用しています。それは私にとって魅力のように働いています。また、ファイルがその場所に存在することを確認してください。それ以外の場合、FileNotFoundExceptionがスローされます。このメソッドは、ファイルが見つからない場合、ターゲットの場所に新しいファイルを作成しません。
コンソール出力を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();
}
}