Come possiamo reindirizzare l'output della console di un programma Java su più file?


161

Come possiamo reindirizzare l'output della console di eclipse su un file? Io posso:

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

Il problema con 1) è che devo registrare l'output della console in file diversi anziché in un solo file.

Il problema con 2) è che memorizza solo l'output della console generato da System.out.println()o stacktrace di un'eccezione generata. Non acquisisce altri tipi di output, ad esempio avvisi log4j ecc.

Come possiamo reindirizzare l'output della console su file diversi a livello di codice?


1) Forse dovresti usare "Variables .." (ex) C: \ test $ {???: ??}.
Txt

2
Ecco un'idea. Scrivi il tuo plugin eclipse (cioè un pulsante cusotm) che assegnerebbe un valore casuale ma unico a una variabile (chiamata ${NAME}), quindi farebbe la stessa cosa di run. Quindi utilizzare $NAMEcome valore per il file di output. può essere?
Uno Due Tre

Risposte:


176

Vai a Esegui come e scegli Run Configurations-> Commone in Input e Output standard puoi anche scegliere un File.


106
Trovo assolutamente divertente che 40 persone abbiano votato una copia-incolla dalla seconda riga della domanda.
AnthonyW,

13
@AnthonyW Penso che sia principalmente perché le persone sono guidate qui dalla domanda del titolo che è "Come possiamo reindirizzare l'output dell'eclissi su un file". Questa risposta è in realtà una risposta alla domanda del titolo.
Gerome Bochmann,

1
Se non riesci a trovare "Esegui configurazioni", utilizzando Eclipse 4.4 (Luna), ho aperto la mia configurazione di avvio (facendo doppio clic sul server nella scheda Server), ho fatto clic su "Apri configurazione lanuch", quindi sono andato alla scheda Comune . Nella metà inferiore di quella finestra di dialogo, c'è una sezione chiamata "Input e Output standard". Qui, potrei fare clic su File e assegnargli un nome.
Guy Schalnat il

1
Suggerimento: apri un terminale echo $TTYe specifica tutto ciò che restituisce come file. Quindi il terminale rispecchierà ciò che è nella tua console Eclipse.
Sridhar Sarnobat,

2
Che cosa? Questa risposta non è corretta quando si legge attentamente la domanda dell'interrogatore.
ComputerScientist l'

11

È possibile utilizzare una "variabile" all'interno del nome file di output, ad esempio:

/tmp/FetchBlock-${current_date}.txt

data odierna:

Restituisce l'ora di sistema corrente formattata come aaaaMMdd_HHmm. È possibile utilizzare un argomento facoltativo per fornire una formattazione alternativa. L'argomento deve essere un modello valido per java.util.SimpleDateFormat.

Oppure puoi anche usare una proprietà_sistema o una env_var per specificare qualcosa di dinamico (uno deve essere specificato come argomento)


8

È possibile impostare l'output di System.out a livello di codice facendo:

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

Modificare:

A causa del fatto che questa soluzione si basa su a PrintStream, possiamo abilitare AutoFlush, ma secondo i documenti :

autoFlush - Un valore booleano; se vero, il buffer di output verrà scaricato ogni volta che viene scritta una matrice di byte, viene richiamato uno dei metodi println o viene scritto un carattere di nuova riga o byte ('\ n')

Quindi, se non viene scritta una nuova riga, ricordati di System.out.flush() manualmente.

(Grazie Robert Tupelo-Schneck)


1
Sembra che sia necessario chiudere anche System.out.flush()per evitare l'eventuale mancanza di output.
Robert Tupelo-Schneck,

1

Per risolvere il problema uso la variabile $ {string_prompt}. Mostra una finestra di dialogo di input all'avvio dell'applicazione. Posso impostare manualmente la data / ora in quella finestra di dialogo.

  1. Sposta il cursore alla fine del percorso del file. inserisci qui la descrizione dell'immagine

  2. Fare clic sulle variabili e selezionare string_prompt inserisci qui la descrizione dell'immagine

  3. Seleziona Applica ed esegui inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine


0

Possiamo farlo impostando la variabile della classe System nel modo seguente

System.setOut (nuovo PrintStream (nuovo FileOutputStream ("Percorso del file di output"))). Inoltre, è necessario chiudere o svuotare la variabile 'out' (System.out.close () o System.out.flush ()) in modo da non perdere alcuni output.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.