Olá pessoal!
Estou usando o método System.setErr(PrintStream); para direcionar minhas saídas de erro para um arquivinho txt.
Só que toda vez que uso esse comando ele sobreescreve o arquivo se ele já existir. Alguém sabe como posso fazer pra que se o arquivo já existir ele adicione o que for preciso no arquivo existente, sem sobreescrevê-lo?
Grata,
Renata
OBS: Não consigo mais pesquisar nos foruns, tá com problema mesmo ou só comigo que isso tá acontecendo? 
Bom eu tenho um exemplo aqui:
[code]package com.squadra.caixa.persistencia.entidade;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class ArquivoLogErro {
public static void criaArquivoLogErro (String msg){
File file = null;
FileWriter fileWriter = null;
try {
file = new File(System.getProperty("user.dir") + File.separator + "log.txt");
fileWriter = new FileWriter(file, true); // creio que vc nao setou true aqui...
fileWriter.write(msg);
} catch (IOException e) {
e.printStackTrace();
}finally{
if(fileWriter != null){
try {
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
[/code]
Isso deve ser questão do PrintStream que voce cria.
O construtor de FileOutputStream tem um parametro para que o proximo conteudo seja colocado depois do já existente.
Olá evertonsilvagomesjava, creio que vc não entendeu. Não se trata de um método MEU de gravação de log, isso eu tenho e funciona. Estou falando de um método específico do Java, o System.setErr(PrintStream); que faz SOZINHO o desvio do que sairia como erro no console para o PrintStream passado. Minha dúvida é como faço pra falar pra ele que não quero que ele sobreescreva o último arquivo.
Mark_Ameba eu tentei esse parâmetro que vc está falando sim. Foi a primeira coisa que tentei, e não deu certo! Ele ignora… alguma outra idéia?!
Obrigada,
Renata
[quote=RenataFA]Mark_Ameba eu tentei esse parâmetro que vc está falando sim. Foi a primeira coisa que tentei, e não deu certo! Ele ignora… alguma outra idéia?!
[/quote]
Olá,
A sugestão do Mark está certa… pra tirar a dúvida eu fiz um teste aqui e funcionou:
[code]import java.io.*;
import java.util.Date;
public class SetErr {
static final String ERRFILE = "/temp/seterrtest/stderr.txt";
public static void main (String[] args) throws IOException {
File f = new File(ERRFILE);
FileOutputStream fos = new FileOutputStream(f, true);
PrintStream ps = new PrintStream(fos, true);
System.setErr(ps);
// Manda algumas mensagens para System.err, primeiro
// manualmente depois jogando uma exceção.
Date dt = new Date();
System.err.println("Mensagem com println " + dt);
new Exception("Mensagem stacktrace " + dt).printStackTrace();
}
}[/code]
Mas como? Eu estou usando aqui e não funciona!
Vou testar denovo, já respondo.
Vcs tem toda razão!
Eu tava usando certo, como vcs deram no exemplo, o fato é que o erro não era ali.
Algumas linhas pra cima, no fonte, tinha um tal de um método que estava APAGANDO meu arquivo de log. Então eu sempre tinha a impressão de que o System.setErr que estava sobreescrevendo, quando na verdade o método anterior que estava apagando e depois ele criando um novo.
Agora está tudo ok.
Desculpem pela bobeira.
Grata,
Renata