Jak możemy przekierować dane wyjściowe konsoli programu Java do wielu plików?

161

Jak możemy przekierować dane wyjściowe konsoli eclipse do pliku? Mogę:

  1. Run Configuration-> Commons-> Select a file.
  2. Użyj System.setOut(PrintStream)i System.setErr(PrintStream).

Problem z 1) polega na tym, że muszę nagrywać dane wyjściowe konsoli do różnych plików zamiast do jednego pliku.

Problem z 2) polega na tym, że przechowuje tylko dane wyjściowe konsoli wygenerowane przez System.out.println()lub ślad stosu zgłoszonego wyjątku. Nie przechwytuje innych rodzajów danych wyjściowych, np. Ostrzeżeń log4j itp.

Jak możemy programowo przekierować dane wyjściowe konsoli do różnych plików?

Ali Shah
źródło
1) Może powinieneś użyć "Variables .." (ex) C: \ test $ {???: ??}. Txt
cloverink
2
Oto pomysł. Napisz własną wtyczkę eclipse (np. Przycisk cusotm), która przypisze losową, ale unikalną wartość zmiennej (wywołanej ${NAME}), a następnie zrobi to samo, co run. Następnie użyj $NAMEjako wartości dla pliku wyjściowego. może?
One Two Three

Odpowiedzi:

176

Idź do uruchomienia jako i wybierz Run Configurations-> Commonaw Standardowym wejściu i wyjściu możesz również wybrać Plik.

Shervin Asgari
źródło
106
Uważam za absolutnie zabawne, że 40 osób zagłosowało za kopiowaniem i wklejaniem z drugiej linii pytania.
Anthony W,
13
@AnthonyW Myślę, że dzieje się tak głównie dlatego, że ludzie kierują się tutaj tytułowym pytaniem, które brzmi „Jak przekierować wyjście zaćmienia do pliku”. Ta odpowiedź jest w istocie odpowiedzią na tytułowe pytanie.
Gerome Bochmann
1
Jeśli nie możesz znaleźć "Run Configurations", używając Eclipse 4.4 (Luna), otworzyłem konfigurację Launch Configuration (dwukrotnie klikając serwer w zakładce Serwery), kliknąłem "Otwórz konfigurację lanuch", a potem przeszedłem do zakładki Wspólne . W dolnej połowie tego okna dialogowego znajduje się sekcja o nazwie „Standardowe wejście i wyjście”. Tutaj mogłem kliknąć Plik i nadać mu nazwę pliku.
Guy Schalnat,
1
Wskazówka: otwórz terminal echo $TTYi określ, co zwróci jako plik. Następnie terminal będzie odzwierciedlał zawartość konsoli Eclipse.
Sridhar Sarnobat
2
Co? Ta odpowiedź jest nieprawidłowa, jeśli uważnie czytasz pytanie pytającego.
ComputerScientist,
11

Możesz użyć „zmiennej” wewnątrz nazwy pliku wyjściowego, na przykład:

/tmp/FetchBlock-${current_date}.txt

bieżąca data:

Zwraca bieżący czas systemowy w formacie rrrrMMdd_GGmm. Opcjonalny argument może służyć do zapewnienia alternatywnego formatowania. Argument musi być prawidłowym wzorcem dla java.util.SimpleDateFormat.

Lub możesz również użyć system_property lub env_var, aby określić coś dynamicznego (albo jeden musi być określony jako argumenty)

mike32b
źródło
8

Możesz ustawić wyjście System.out programowo, wykonując:

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

Edytować:

W związku z tym, że to rozwiązanie bazuje na a PrintStream, możemy włączyć autoFlush, ale zgodnie z dokumentacją :

autoFlush - wartość logiczna; jeśli prawda, bufor wyjściowy zostanie opróżniony za każdym razem, gdy zostanie zapisana tablica bajtów, zostanie wywołana jedna z metod println lub zostanie zapisany znak nowego wiersza lub bajt („\ n”)

Więc jeśli nie zostanie napisana nowa linia, pamiętaj, aby System.out.flush()ręcznie.

(Dzięki Robert Tupelo-Schneck)

Ian2thedv
źródło
1
Wygląda na to, że musisz również zamknąć program System.out.flush(), aby uniknąć ewentualnego pominięcia niektórych wyników.
Robert Tupelo-Schneck
1

Aby rozwiązać problem, używam zmiennej $ {string_prompt}. Pokazuje okno dialogowe wprowadzania danych, gdy aplikacja jest uruchomiona. Mogę ręcznie ustawić datę / godzinę w tym oknie dialogowym.

  1. Przesuń kursor na koniec ścieżki pliku. wprowadź opis obrazu tutaj

  2. Kliknij zmienne i wybierz string_prompt wprowadź opis obrazu tutaj

  3. Wybierz Zastosuj i uruchom wprowadź opis obrazu tutaj wprowadź opis obrazu tutaj

iOS-Developer84
źródło
0

Możemy to zrobić, wyznaczając zmienną klasy System w następujący sposób

System.setOut (new PrintStream (new FileOutputStream ("Ścieżka do pliku wyjściowego"))). Musisz także zamknąć lub opróżnić zmienną 'out' (System.out.close () lub System.out.flush ()), aby nie stracić części danych wyjściowych.

Źródło: http://xmodulo.com/how-to-save-console-output-to-file-in-eclipse.html

drp
źródło