Bagaimana kita bisa mengarahkan output konsol program Java ke beberapa file?

161

Bagaimana kita bisa mengarahkan output konsol gerhana ke file? Saya bisa:

  1. Run Configuration-> Commons-> Select a file.
  2. Gunakan System.setOut(PrintStream)dan System.setErr(PrintStream).

Masalah dengan 1) adalah saya harus merekam output konsol ke file yang berbeda, bukan satu file.

Masalah dengan 2) adalah ia hanya menyimpan output konsol yang dihasilkan oleh System.out.println()atau stacktrace dari pengecualian yang dilemparkan. Itu tidak menangkap jenis output lain misalnya peringatan log4j dll.

Bagaimana kita bisa mengarahkan output konsol ke file yang berbeda secara terprogram?

Ali Shah
sumber
1) Mungkin Anda harus menggunakan "Variabel .." (ex) C: \ test $ {???: ??}.
Txt
2
Ini ide. Tulis plugin eclipse Anda sendiri (mis., Tombol cusotm) yang akan menetapkan nilai acak tetapi unik untuk variabel (dipanggil ${NAME}), kemudian akan melakukan hal yang sama seperti menjalankan. Kemudian gunakan $NAMEsebagai nilai untuk file output. mungkin?
Satu Dua Tiga

Jawaban:

176

Pergi untuk menjalankan sebagai dan pilih Run Configurations-> Commondan di Input dan Output Standar Anda dapat memilih File juga.

Shervin Asgari
sumber
106
Saya merasa benar-benar lucu bahwa 40 orang menaikkan copy-paste dari baris kedua dari pertanyaan.
AnthonyW
13
@AnthonyW Saya pikir itu sebagian besar karena orang-orang dipimpin di sini oleh pertanyaan judul yaitu "Bagaimana kita bisa mengarahkan keluaran gerhana ke file". Jawaban ini sebenarnya adalah jawaban untuk pertanyaan judul.
Gerome Bochmann
1
Jika Anda tidak dapat menemukan "Run Configurations", menggunakan Eclipse 4.4 (Luna), saya membuka Konfigurasi Peluncuran saya (dengan mengklik dua kali pada server di tab Server), klik pada "Buka konfigurasi lanuch", kemudian pergi ke tab Umum . Di bagian bawah dialog itu, ada bagian yang disebut "Input dan Output Standar". Di sini, saya bisa mengklik File dan memberinya nama file.
Guy Schalnat
1
Petunjuk: buka terminal, echo $TTYdan tentukan apa pun yang dikembalikan sebagai file Anda. Kemudian terminal akan mencerminkan apa yang ada di konsol Eclipse Anda.
Sridhar Sarnobat
2
Apa? Jawaban ini salah ketika membaca pertanyaan si penanya dengan cermat.
ComputerScientist
11

Anda bisa menggunakan "variabel" di dalam nama file keluaran, misalnya:

/tmp/FetchBlock-${current_date}.txt

tanggal sekarang:

Mengembalikan waktu sistem saat ini yang diformat sebagai yyyyMMdd_HHmm. Argumen opsional dapat digunakan untuk memberikan pemformatan alternatif. Argumen harus berupa pola yang valid untuk java.util.SimpleDateFormat.

Atau Anda juga dapat menggunakan system_property atau env_var untuk menentukan sesuatu yang dinamis (salah satu harus ditentukan sebagai argumen)

mike32b
sumber
8

Anda dapat mengatur output System.out secara pemrograman dengan melakukan:

System.setOut(new PrintStream(new BufferedOutputStream(new FileOutputStream("/location/to/console.out")), true));

Edit:

Karena kenyataan bahwa solusi ini didasarkan pada a PrintStream, kita dapat mengaktifkan autoFlush, tetapi menurut dokumen :

autoFlush - A boolean; jika benar, buffer output akan memerah setiap array byte ditulis, salah satu metode println dipanggil, atau karakter baris baru atau byte ('\ n') ditulis

Jadi, jika baris baru tidak ditulis, ingatlah untuk System.out.flush()secara manual.

(Terima kasih Robert Tupelo-Schneck)

Ian2thedv
sumber
1
Tampaknya Anda juga harus menutup System.out.flush()untuk menghindari kemungkinan kehilangan beberapa output.
Robert Tupelo-Schneck
1

Untuk mengatasi masalah ini saya menggunakan variabel $ {string_prompt}. Ini menunjukkan dialog input ketika aplikasi berjalan. Saya dapat mengatur tanggal / waktu secara manual pada dialog itu.

  1. Pindahkan kursor di akhir jalur file. masukkan deskripsi gambar di sini

  2. Klik variabel dan pilih string_prompt masukkan deskripsi gambar di sini

  3. Pilih Terapkan dan Jalankan masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

iOS-Developer84
sumber
0

Kita bisa melakukan ini dengan menetapkan variabel kelas Sistem dengan cara berikut

System.setOut (PrintStream baru (FileOutputStream baru ("Path ke file output"))). Anda juga perlu menutup atau menyapu variabel 'out' (System.out.close () atau System.out.flush ()) sehingga Anda tidak akan melewatkan beberapa output.

Sumber: http://xmodulo.com/how-to-save-console-output-to-file-in-eclipse.html

drp
sumber