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!
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!
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.
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);
Mas este fonte que vc colocou é só uma forma diferente de eu armazenar o erro né?
Pq não vi o System.err.println()…
é 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.
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 …
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?
não, uma vez que você redirecionou o err durante toda a execução do seu aplicativo ele estará mudado
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… 
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
Amigo obridado pela explicação…
Vou pesquisar mais sobre…
