System.out

10 respostas
M

Pessoal, qual é a diferença entre usar System.out.println(“mensagem de erro”) ou usar System.err.println(“mensagem de erro”) sendo q me parece o System.err.println usa a saida padrão para emitir a mensagem. No caso de um Bloco try.

Obridado!

10 Respostas

cv1

POR ACASO, na maioria dos sistemas operacionais, System.out e System.err apontam pra tela, mas eles sao dois streams diferentes - como os nomes dizem, um pra saida normal e outro pra saida de mensagens de erro.

marciolx

você pode redirecionar o err para outro stream, um arquivo por exemplo:

PrintStream err = null;
	try {
	    err = new PrintStream (new BufferedOutputStream(new FileOutputStream ("c:\log_tosco.out")));
	} catch (Exception e) {
                    // tratar excessão
                }
	System.setErr(err);
M

Mas este fonte que vc colocou é só uma forma diferente de eu armazenar o erro né?

Pq não vi o System.err.println()

marciolx

é uma forma de redirecionar o stream err do lugar padrão que é a tela para um arquivo, a partir daí sempre que você chamar System.err.println(“alguma coisa”), alguma coisa irá para o arquivo e não para a tela.

desculpe se eu chamei a variável PrintStream de err, mas poderia ser:

PrintStream abacate = null;

veja o que diz a API do System.setErr:

setErr
public static void setErr(PrintStream err)
Reassigns the “standard” error output stream.

smota

Olá …

Ter e usar os 2 streams é essencial pra você poder escrever um bom programa.

Deixe que o usuário decida onde vai a saída de cada um, o usuario pode redirecionar pra arquivo, impressora, tela, o que for usando apenas o > (ou >>) … assim:

java meuPrograma > saidaOK.txt 2> saidaERR.txt

e por ai vai …

M

Porém neste caso eu vou ter sempre que criar uma instância de PrintStream para que a saída vá para um arquivo…

Tipo a cada chamanda minha de try, estou certo?

marciolx

não, uma vez que você redirecionou o err durante toda a execução do seu aplicativo ele estará mudado

M

Então eu poderia no inicio do meu fonte cria este tratamento aí sempre que eu chamesse System.err.println(“mensagem”) ele enviaria para um arquivo…bom isso acho q entendi…

Agora se for possível daria para vc comentar esta linha aqui…

err = new PrintStream (new BufferedOutputStream(new FileOutputStream (“c:log_tosco.out”)));

Fiquei confuso nela… :smiley:

marciolx

ela cria o PrintStream (que é o parâmetro para o setErr) a partir do arquivo. O construtor do PrintStream precisa de um OutputStream ou stream de saída que aqui é representado por um arquivo (passado no construtor de FileOutputStream. O BufferedOutputStream também é um output stream chamado de filter stream e neste caso ele não seria necessário, mas o que ele faz é utilizar um buffer para não fazer chamadas ao sistema para cada byte escrito, ele tem um buffer interno que escreve os dados apenas quando está cheio, ou quando é fechado ou quando você chama seu método flush() explicitamente.

veja:
http://java.sun.com/docs/books/tutorial/essential/io/index.html

M

Amigo obridado pela explicação…

Vou pesquisar mais sobre…

:smiley:

Criado 18 de agosto de 2003
Ultima resposta 18 de ago. de 2003
Respostas 10
Participantes 4