Bir Java program konsolu çıktısını birden çok dosyaya nasıl yeniden yönlendirebiliriz?


161

Tutulma konsolu çıktısını bir dosyaya nasıl yeniden yönlendirebiliriz? Yapabilirim:

  1. Run Configuration-> Commons-> Select a file.
  2. Kullanım System.setOut(PrintStream)ve System.setErr(PrintStream).

1) ile sorun, ben bir dosya yerine farklı dosyalara konsol çıktı kaydetmeniz gerektiğidir.

2) ile ilgili sorun sadece System.out.println()atılan bir istisna tarafından oluşturulan konsol çıktısını veya stacktrace saklamak olmasıdır. Log4j uyarıları vb. Gibi diğer çıktıları yakalamaz.

Konsol çıktısını programlı olarak farklı dosyalara nasıl yeniden yönlendirebiliriz?


1) Belki de "Değişkenler .." (örneğin) C: \ test $ {???: ??}. Txt
cloverink 19:11

2
İşte bir fikir. Bir değişkene (denir ${NAME}) rastgele ancak benzersiz bir değer atayacak , ardından çalıştırılanla aynı şeyi yapacak olan kendi tutulma eklentinizi (yani, bir cusotm düğmesi) yazın . Sonra $NAMEçıktı dosyası için değer olarak kullanın . olabilir?
Bir İki Üç

Yanıtlar:


176

Farklı çalıştır seçeneğine gidin ve Run Configurations-> öğesini seçin Commonve Standart Girdi ve Çıktı'da bir Dosya da seçebilirsiniz.


106
Sorunun ikinci satırından 40 kişinin kopyala yapıştırmasını kesinlikle çok komik buluyorum.
AnthonyW

13
@AnthonyW Bence bu çoğunlukla insanlar burada "tutulma çıktısını bir dosyaya nasıl yönlendirebiliriz" başlıklı soru tarafından yönlendiriliyor. Bu cevap aslında başlık sorusuna bir cevaptır.
Gerome Bochmann

1
Eclipse 4.4 (Luna) kullanarak "Çalıştırma Yapılandırmaları" bulamıyorsanız, Başlat Yapılandırmamı açtım (Sunucular sekmesindeki sunucuyu çift tıklatarak), "Lanuch yapılandırmasını aç" ı tıklatıp Ortak sekmesine gittim . Bu iletişim kutusunun alt yarısında "Standart Girdi ve Çıktı" adlı bir bölüm vardır. Burada, Dosya'ya tıklayıp bir dosya adı verebilirim.
Guy Schalnat

1
İpucu: bir terminal açın echo $TTYve dosyanız olarak ne döndürürse onu belirtin. Ardından terminal Eclipse konsolunuzdakileri yansıtır.
Sridhar Sarnobat

2
Ne? Bu cevap soru sorusunu dikkatle okurken yanlıştır.
ComputerScientist

11

Çıktı dosya adının içinde bir "değişken" kullanabilirsiniz, örneğin:

/tmp/FetchBlock-${current_date}.txt

Geçerli tarih:

YyyyMMdd_HHmm olarak biçimlendirilmiş geçerli sistem saatini döndürür. Alternatif biçimlendirme sağlamak için isteğe bağlı bir bağımsız değişken kullanılabilir. Bağımsız değişken java.util.SimpleDateFormat için geçerli bir kalıp olmalıdır.

Veya dinamik bir şey belirtmek için bir system_property veya env_var kullanabilirsiniz (birinin bağımsız değişken olarak belirtilmesi gerekir)


8

System.out çıktısını programlı olarak aşağıdakileri yaparak ayarlayabilirsiniz:

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

Düzenle:

Bu çözümün PrintStreama'ya dayalı olması nedeniyle , autoFlush'ı etkinleştirebiliriz, ancak dokümanlara göre :

autoFlush - Bir boole; true olursa, bayt dizisi her yazıldığında, println yöntemlerinden biri çağrıldığında veya yeni satır karakteri veya bayt ('\ n') yazıldığında çıktı arabelleği temizlenir

Dolayısıyla, yeni bir satır yazılmadıysa, System.out.flush()manuel olarak yazmayı unutmayın .

(Teşekkürler Robert Tupelo-Schneck)


1
System.out.flush()Bazı çıktıları kaçırmamak için de kapatmanız gerekiyor gibi görünüyor .
Robert Tupelo-Schneck

1

Sorunu çözmek için $ {string_prompt} değişkenini kullanıyorum. Uygulama çalıştığında bir giriş iletişim kutusu gösterir. O diyalogda tarih / saati manuel olarak ayarlayabilirim.

  1. İmleci dosya yolunun sonunda hareket ettirin. resim açıklamasını buraya girin

  2. Değişkenleri tıklayın ve string_prompt öğesini seçin resim açıklamasını buraya girin

  3. Uygula ve Çalıştır'ı seçin resim açıklamasını buraya girin resim açıklamasını buraya girin


0

Bunu, System sınıfı değişkenini aşağıdaki şekilde ayarlayarak yapabiliriz

System.setOut (yeni PrintStream (yeni FileOutputStream ("Çıktı dosyasına giden yol"))). Ayrıca bazı çıkışları kaçırmamak için 'out' (System.out.close () veya System.out.flush ()) değişkenini kapatmanız veya temizlemeniz gerekir.

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.