ArrayList - erro ao carregar de um .txt

9 respostas
A

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.

Grato pela ajuda.

Vinicius Aderne

9 Respostas

ddduran

aqui no GUJ tem um tutorial sobre IO

http://www.guj.com.br/java.tutorial.artigo.13.1.guj

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…

A

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

A

Pessoal, preciso de qualquer método que consiga fazer uma inserção de dados em algum lugar de um arquivo, desde que não seja no final.
Obrigado.

kemperacc

Usa um ArrayList<String>

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

jgbt

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.

[]'s

A

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 [telefone removido] Controladoras, Controladas e
Carreagado: 5 C [telefone removido] Pessoas Fisicas e Juridicas
Carreagado: 6 C [telefone removido] Pessoas Fisicas e Juridicas
java.lang.NumberFormatException: For input string: “[telefone removido]”

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.

Refiz os métodos e nada! podem, me ajudar.

se puderem eu estou no msn [email removido] para poder compartilhar os arquivos

Muito obrigado pela ajuda.

A

pessoal, vou por os arquivos aqui para ver se podem me ajudar.

Mantu

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 “[telefone removido]” 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())

A

Exatamente isso. Funciona bem agora. Muito obrigado!

Criado 27 de novembro de 2006
Ultima resposta 1 de dez. de 2006
Respostas 9
Participantes 5