インターネットから以下のコードを見つけましたが、機能しますが、印刷されたコンソールはomt.txtに書き込まれず、2番目のcatchブロックの後にSystem.out.println
ステートメントのみが書き込まれます。コードを実行すると、何がわかるかがわかります。つまり、私が欲しいのは、コンソールにあるものをすべて「omt.txt」ファイルに書き込むことです...
いくつかの回答の後、私の質問が明確ではなかったことがわかりました。申し訳ありません。コンソール出力をomt.txtテキストファイルに保存したい。コンソールに「Hello123」が印刷されている場合は、omt.txtファイルにもある必要があります。つまり、コンソールに印刷されているものはすべて、om.txtファイルに同時に書き込むか、コンソールの実行後に書き込む必要があります。 1対1で同じです!
import Java.io.File;
import Java.io.FileOutputStream;
import Java.io.PrintStream;
public class Wrt_file {
public static void main(String[] args) {
System.out.println("THIS is what I see on the console. but not on TEXT file");
File f = new File("omt.txt");
if(!f.exists())
{
try {
f.createNewFile();
} catch (Exception e) {
e.printStackTrace();
}
}
try {
FileOutputStream fos = new FileOutputStream(f);
PrintStream ps = new PrintStream(fos);
System.setOut(ps);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("THIS is what I see on the text file, but not on CONSOLE");
for (int i=0; i<10; i++){
System.out.println("Testing");
}
}
}
両方のストリームにデータを書き込みたいので、 TeeOutputStream
from Apache Commons を使用してみてください。 2回目の試行でコードを変更します
try {
FileOutputStream fos = new FileOutputStream(f);
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
try {
fos.flush();
}
catch (Throwable t) {
// Ignore
}
}, "Shutdown hook Thread flushing " + f));
//we will want to print in standard "System.out" and in "file"
TeeOutputStream myOut=new TeeOutputStream(System.out, fos);
PrintStream ps = new PrintStream(myOut, true); //true - auto-flush after println
System.setOut(ps);
} catch (Exception e) {
e.printStackTrace();
}
これで、System.out
の結果もファイルに配置されます。
System.Java
、これはout
プロパティの宣言です。
public final static PrintStream out
一度に1つのPrintSteamオブジェクトにしかなり得ないことがわかります。つまり、コンソールまたはファイルのいずれかですが、両方ではありません。
この行で、宛先を効果的に再チャネル化しました。
System.setOut(ps);
そのため、出力はコンソールに表示されなくなります。
その理由は :
The Java.lang.System.setOut()
メソッドは、「標準」出力ストリームを再割り当てします。
したがって、System.out.println
を使用すると、テキストファイルにのみ出力されます
したがって、テキストファイルとコンソールに印刷する場合は、次のことを試してください。
FileOutputStream fos = new FileOutputStream(f);
PrintStream ps = new PrintStream(fos);
ps.println("THIS is what I see on the text file, but not on CONSOLE");
System.out.println("THIS is what I see on the text file, but not on CONSOLE");
for (int i = 0; i < 4; i++) {
ps.println("Testing");
System.out.println("Testing");
}