Pessoal, estou com um problema,
Criei uma aplicação para ler um plano de contas de um arquivo .txt e organizá-lo em um JTree. Está funcionando muito bem, porém necessito que ela insira uma nova conta e atualize o arquivo .txt pois a minha busca é sequencial.
Atualmente ela está inserindo as informações na última linha do arquivo.
mas eu acredito que você tenha que fazer as suas modificações dentro de uma String (depois de ter lido todo o arquivo) e grava essa String inteira no arquivo… pois não achei nenhum metodo que tivesse a linha e a coluna onde escrever no arquivo…
eu ja tinha lido esse artigo e me ajudou no inicio do código.
Eu estou fazendo isso mesmo, inserindo um string que contem uma linha completa. O problema ta aí:
Eu digito um novo código de conta a ser cadastrada.
Faço uma busca e localizo o código exatamente menor que ele de uma conta ja gravada no arquivo.
A partir daí o que precisaria fazer é saltar para o final desta linha, inserir uma nova linha e gravar a minha String sobre ela.
Uma inserção mesmo, porém na linha correta.
Segue abaixo a estrutura do arquivo e o trecho do codigo que estou utilizando:
public void procurar (String cod) throws Exception {
try{
String e=null;
String linha = null;
String linhainteira = null;
boolean consta=false;
FileReader reader = new FileReader(arquivo);
BufferedReader buffReader = new BufferedReader(reader);
FileWriter writer = new FileWriter(arquivo,true);
PrintWriter arquivo_escrever = new PrintWriter(writer);
while ((linha = buffReader.readLine()) != null){
linhainteira = linha.trim().toUpperCase();
String aux=linha.substring(5,20).trim();
if (cod.trim().compareTo(aux) == 0){
System.out.println(cod+" <-> "+linha.substring(5));
arquivo_escrever.println(aux.toUpperCase());
System.out.println("Conta Encontrada");
consta=true;
}
}
reader.close();
buffReader.close();
//return (consta);
}
catch (Exception ex){
System.out.println(ex);}
}
ARQUIVO BASE PLANO DE CONTAS .TXT
1ºAD 1 ATIVO
2ºAD 1.1 CIRCULANTE
3ºAD 1.1.1 Disponível
4ºAD 1.1.1.01 Caixa e Bancos
5ºAD 1.1.1.01.01 Caixa Geral
5ºAD 1.1.1.01.02 Caixa Tesouraria
5ºAD 1.1.1.01.03 Caixa Recepção
5ºAD 1.1.1.01.04 Caixa Compras
5ºAD 1.1.1.01.05 Caixa Aeroporto
5ºAD 1.1.1.01.06 Caixa Obras e Reformas
4ºAD 1.1.1.02 Depósitos a Vista
5ºAD 1.1.1.02.01 Banco Bradesco Ag. CTC
5ºAD 1.1.1.02.02 Banco Santander
4ºAD 1.1.1.03 Numerários em Trânsito
Primeiro, voce preenche ele, sendo que cada linha vai ser uma entrada no arraylist, nao sei como ler linha por linha do arquivo, mais com certeza tem um jeito…
ArrayList<String> arquivoOriginal = new ArrayList<String>();
//Para adicionar um item...
arquivoOriginal.add("suaLinha");
Para inserir algo em uma determinada posicao:
arquivoOriginal.add(intPosicao, "novaLinha");
Eu estou sem meu ambiente de desenvolvimento agora, toh soh no navegador mesmo, posso ter trocado algum nome de metodo ou posicao de parametro, mas com certeza o arraylist vai resolver
diretamente no arquivo não tem como. vc precisa ir lendo o arquivo original e escrevendo um novo, ate o ponto que vc quer inserir, colocar a linha nova e continuar.
é mais facil vc carregar esse arquivo em um objeto como ja foi sugerido e manipular esse obj ate que vc precise realmente escrever no disco o arquivo.
Pessoal, fiz essa modificação de ler e carregar em um ArrayList, porem em determinado ponto do arquivo ele me dá uma exceção:
"Carreagado: 6 C 2120102001 Controladoras, Controladas e
Carreagado: 5 C 2120103000 Pessoas Fisicas e Juridicas
Carreagado: 6 C 2120103001 Pessoas Fisicas e Juridicas
java.lang.NumberFormatException: For input string: “2200000000”
Seja qual for o tamanho do arquivo ele me dá essa exceção.
Para tirar a duvida de ser algum problema no arquivo, eu criei um arquivo pequeno na mão grande e ele me dá o mesmo erro.
Não vi a fundo seu problema (Estou um pouco apressado) mas isso está me cheirando a estouro de dado. Provavelmente vc está tentando transformar o String “2200000000” em um int com o Integer.parseInt(), e esse número não cabe em um int. Tente transforma para um [list]long[/list] (Long.parseLong())