Duvida Leitura de arquivo

4 respostas
L

ola tudo bom meu problema e o seguinte tenho que ler um arquivo .txt no seguinte formato :

Deus da Silva#33559655#[email removido]

Claudiomiro Borges#32548875#[email removido]

Genivaldo Souza#32598478#[email removido]

meu codigo le o arquivo se nao tiver uma linha de diferença entre eles , alguem poderia me ajudar , segue o codigo .

public static Lista lerArquivo(String arquivo) throws Exception {
        File file = new File(arquivo);
        byte[] b = new byte[(int) file.length()];
        FileInputStream stream = new FileInputStream(file);
        Lista pessoas = new Lista();

        stream.read(b);
        stream.close();
        for (String linha : new String(b).split("\n")) {
            String[] item = linha.split("\\#");
            pessoas.insereNo(DadosPessoa.Cadastra(item[0], item[1], item[2]));
        }

        return pessoas;
    }

4 Respostas

Rodrigo_Sasaki

Você pode ler usando um Reader com um BufferedReader ou simplesmente usando um Scanner.

Mas no caso a ideia principal é você adicionar uma condição para ignorar a linha caso ela esteja vazia.

E

É sempre uma péssima idéia ler um arquivo-texto inteiro em memória, se você vai só acessar uma linha de cada vez. Eu reescreveria sua rotina como:

BufferedReader br = new BufferedReader (new FileReader (arquivo));
    Lista pessoas = new Lista();
    for (String linha = br.readLine(); linha != null; linha = br.readLine()) {
        String[] itens = linha.split ("#");
        if (itens.length >= 3) { // note que isso faz com que apenas linhas corretas entrem, não as linhas vazias
            pessoas.insereNo(DadosPessoa.Cadastra(item[0], item[1], item[2]));
        } 
    }
    br.close();
    return pessoas;

Viu? Muito mais claro e você não terá problemas de estouro de memória com arquivos de entrada muito grandes.

EDIT - esqueci de encapsular o FileReader no BufferedReader - sorry

E

OK, ok, eu tenho a mania de escrever uma leitura de arquivo com um “for” em vez de um “while”.
Realmente o “while” abaixo gera menos código, e é mais comum de ser vista em código profissional:

String linha;
while ((linha = br.readLine()) != null) {  
    String[] itens = linha.split ("#");  
    if (itens.length >= 3) { // note que isso faz com que apenas linhas corretas entrem, não as linhas vazias  
        pessoas.insereNo(DadosPessoa.Cadastra(item[0], item[1], item[2]));  
    }   
}

mas eu acho, em particular, mais difícil de entender :slight_smile: - mas é questão de costume.

L

Obrigado pela ajuda .

Criado 6 de junho de 2013
Ultima resposta 6 de jun. de 2013
Respostas 4
Participantes 3