Quando executo o trecho de código a seguir, ele apaga o conteúdo do arquivo .txt e grava apenas a string que recebeu como parâmetro. Alguém saberia o procedimento para que eu escreva em um .txt, concatenando o conteúdo a ser escrito com o que já está gravado no arquivo? (este método será usado para gravar a log de operação da aplicação em arquivo texto)
public boolean adicionaUmaLinha(String linha) {
try{
os = new FileOutputStream(this.arq);
osr = new OutputStreamWriter(os);
bw = new BufferedWriter(osr);
bw.append(linha);
bw.newLine();
bw.close();
} catch (FileNotFoundException e) {
JOptionPane.showMessageDialog(null, "Erro 007: Arquivo não encontrado.");
return false;
} catch (FileLockInterruptionException e) {
JOptionPane.showMessageDialog(null, "Erro 008: Arquivo em lock.");
return false;
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "Erro 009: Erro de I/O.");
e.printStackTrace();
return false;
}
return true;
}
Ou melhor ainda: delegue a tarefa de logging para classes responsáveis por isso. Use a classe Logger (de java.util.logging) cuida da parte suja. Um exemplo:
import java.util.logging.FileHandler;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
public final class LogManager {
private LogManager() {
}
public static Logger getLogger(String file) {
try {
Logger logger = Logger.getLogger("LogManager");
FileHandler f = new FileHandler(file, true);
f.setFormatter(new SimpleFormatter());
logger.addHandler(f);
return logger;
} catch (Exception e) {
return null;
}
}
}
E para se usar, basta chamar o getLogger() e depois sair “logando”.
import java.util.logging.Level;
import java.util.logging.Logger;
public class TesteLog {
public static void main(String[] args) {
// uma vez feito isso, basta sair usando!
Logger l = LogManager.getLogger("app.log");
l.info("Chegamos aqui!");
l.info("Vamos dormir um pouco");
try {
Thread.sleep(500);
l.info("Ahh... que belo sono");
} catch (InterruptedException e) {
l.log(Level.SEVERE, "Exceção!", e);
}
l.severe("Epa... acho que dormi demais e perdi a hora!");
l.info("Vamos fazer mais alguns testes...");
try {
((Object) null).toString();
l.info("Nunca chegarei aqui...");
} catch (NullPointerException e) {
l.severe("Puxa, algo deu errado");
l.log(Level.SEVERE, "Exceção!", e);
}
}
}