[RESOLVIDO] Ler arquivo TXT para uma Pilha

12 respostas
denisspitfire

Galera pelo amor de deus me ajudem… Seguinte, eu preciso de um resultado de busca em Java, os dados vem em TXT, de um banco de dados em COBOL. Seguinte, quando vem o TXT fica mais ou menos assim essa bagunça.

nome(25), telefone(8), endereço(20).

DENIS CARVALHO SILVA ;22226588;EXEMPLO DE ENDEREÇO

No resultado tem que sair.
NOME: DENIS CARVALHO SILVA
TELEFONE: 22226588
ENDEREÇO: EXEMPLO DE ENDEREÇO

Como funciona. é armazenado em Colunas e cada pedaço será delimitado por um “;” como posso ler o arquivo TXT e depois separar as informações? O resultado precisa ser em uma pagina HTML, mas até ai, preciso resolver esse problema primeiro.
VLW

12 Respostas

pedrohenryque

Cara, fiz algo pareceido recentemente em java e utilizei o split. Crei um array String recebendo os dados lido da linha dando o split pelo caracter para quebrar as informações…

da uma olhada ai http://www.ogenial.com.br/blog/metodo-split-java/

T+

denisspitfire

Aqui na empresa nao abre o Link rs rs rs.
Mas eu to pensando em fazer ± isso, só nao sabia como… acho que isso pode me ajudar…
por exemplo.
Vou sempre dar um novo objeto a cada linha. Cada parte da linha vai para um atributo do objeto… (Acho que ficaria mais organizado…)
Porém, se a cada linha terá um objeto, hoje ja tem 576 linhas, logo… 576 objetos com uns 35 atributos cada… Será que pesa? Quanto?

Porque… se eu for fazer uma busca, por tal atributo…

Nome == tal…
E ja envia todos os objetos para uma pilha e imprime tudo…
Ficaria muito pesado? ou só testando mesmo?
Bom, eu tenho a proposta de fazer isso em asp… asp antigo mesmo, creio que seja muito mais pesado…

pedrohenryque

Criei um laço…

while ((linha = br.readLine()) != null) {
        						String[] linhaP = linha.split("!");
                                if(linhaP.length >= 4) {
                                    Dto.setAtributo1(linhaP[0]);
            				Dto.setAtributo1(linhaP[1]);
                                               Dto.setAtributo1(linhaP[2]);

Ele vai lendo as informações dando split, armazenando na String[] LinhaP e salvando no banco a cada 500 registros…

C

Caso o arquivo venha no seguinte formato:

DENIS CARVALHO SILVA ;22226588;EXEMPLO DE ENDEREÇO

Você pode fazer o seguinte:

  1. Criar uma classe que receberá os dados, uma espécie de “entidade”, digamos assim. Um simples pojo:
public class Pessoa
{

    private String nome;
    private String endereco;
    private String telefone;

    public String getEndereco()
    {
        return endereco;
    }

    public void setEndereco(String endereco)
    {
        this.endereco = endereco;
    }

    public String getNome()
    {
        return nome;
    }

    public void setNome(String nome)
    {
        this.nome = nome;
    }

    public String getTelefone()
    {
        return telefone;
    }

    public void setTelefone(String telefone)
    {
        this.telefone = telefone;
    }
}
  1. Crie um leitor, que devolva uma collection de objetos do tipo Pessoa:
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Leitor
{

    public List<Pessoa> obterPessoas() throws Exception
    {
        List<Pessoa> listaPessoas = new ArrayList<Pessoa>();
        Pessoa pessoa = null;
        String arquivo = ""; // coloque aqui a localização do arquivo
        // o "cara" que vai ler o arquivo....
        Scanner scan = new Scanner(new File(arquivo));
        while (scan.hasNext())
        {
            String linha = scan.nextLine();
            // Cria um array, usando o ";" como separador
            String[] arrayLinha = linha.split(";");
            // Obtem as informações baseado na posição no array:
            pessoa = new Pessoa();
            pessoa.setNome(arrayLinha[0]);
            pessoa.setTelefone(arrayLinha[1]);
            pessoa.setEndereco(arrayLinha[2]);
            //adiciona a pessoa no list
            listaPessoas.add(pessoa);
        }

        return listaPessoas;
    }
}

Espero ter auxiliado.

Qualquer dúvida, entre em contato: [email removido]

denisspitfire

Desculpe a minha ignorancia…
chamei a classe assim

public class Teste {
	public static void main(String[] args) {
		Leitor arquivo = new Leitor();
		System.out.println(arquivo);
	}
}

Deu um erro: Leitor@19821f
Estou chamando errado certo? Não vi Array List ainda… :frowning:

C

Você vai precisar iterar lista, ou seja: vai colocar o resultado dela dentro de um laço, como um for por exemplo:

import java.util.logging.Level;
import java.util.logging.Logger;


public class Teste
{

    public static void main(String[] args)
    {
        try
        {
            Leitor arquivo = new Leitor();
            // este for é mais simples. ja digo que vou "pegar" um objeto pessoa para cada indice da lista devolvida.
            for (Pessoa pessoa : arquivo.obterPessoas())
            {
                System.out.println(pessoa.getNome());
                System.out.println(pessoa.getTelefone());
                System.out.println(pessoa.getEndereco());
                System.out.println("------------------------");
            }
        } catch (Exception ex)
        {
            Logger.getLogger(Teste.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

Espero estar contribuindo. Um abraço.

denisspitfire

Pessoal, não consegui acompanhar o raciocinio. Tive que dar uma mudada nos arquivos.
Fiz um prototipo de ± como vai ser.
programaDeTeste

public class programaDeTeste {
	public static void main(String[] args) {
		int numero=10;
		Caracteristica[] debentures=new Caracteristica[numero];
		for(int n=0;n<numero;n++){
			debentures[n]=new Caracteristica();
		}
		debentures[1].caracteristicas[1]="Teste";
		for(int n=0;n<numero;n++){
			System.out.println(n+": "+debentures[n].caracteristicas[1]);
		}
	}
}

Caracteristica

public class Caracteristica {
	int cadastro;
	String[] caracteristicas = new String[5]; 
	
	
	static int id = 0;
}

Minha idéia é a seguinte, cada obj caracteristica terá um vetor de Strings que cada indice será uma caracteristica. Então eu vou poder ler um documento que virá assim.

Caracteristica 1; caracteristica 2; caracteristica 3; caracteristica 4;

O documento ficará em Caracteristicas/caracteristicas.txt
Como eu posso ler somente linha por linha? é o hasNext();?
Não entendi essa parte. Sorry… se alguem puder me ajudar :slight_smile:
vlw pela ajuda até aqui, me exclareceu bem a minha duvida

denisspitfire

Por favor…alguem me ajuda ae… uma dica qualquer coisa. Tentei tutoriais mas não quero CTRL+C, só preciso entender como ler um arquivo txt, mas linha por linha… alguem pode me ajudar?

aix
public static void main(String[] args) throws FileNotFoundException, IOException {
        new TesteProGuj().leArquivo();
    }

    public void leArquivo() throws FileNotFoundException, IOException {
        FileReader fileReader = new FileReader("c:\arquivo.txt");
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        String linha;
        while ((linha = bufferedReader.readLine()) != null) {
            lendoLinha(linha);
        }
    }

    private void lendoLinha(String linha) {
        int PosicaoInicio = 0;
        int posicaoFi = linha.length();
        linha = linha.substring(PosicaoInicio, posicaoFi);
        System.out.println(linha);
    }
Paulo_Silveira

Ola Denis

Voce pode usar a classe Scanner tambem. e os metodos nextLine e hasNextLine.

Depois, para cada linha, usar o metodo split da String conforme ja falaram aqui.

denisspitfire

Só estou com um problema. Não consigo ler o arquivo no mesmo diretório… ele le sempre um txt que tem no c:
como posso fazer para ele ler somente oque esta no meu diretorio principal?

denisspitfire

Ae pessoal, consegui… Vlw pela ajuda. Segue o código abaixo para quem quiser ver como ficou.

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Scanner;

public class principal {
	public static void main(String[] args) throws Exception {
		Scanner arquivo = new Scanner(new FileReader("arquivo.txt"));
		ArrayList<Caracteristica> pilha = new ArrayList<Caracteristica>();
		Caracteristica objetoTemp;
		long inicio = System.currentTimeMillis();
		while (arquivo.hasNextLine()) {
			String linha = arquivo.nextLine();
			Caracteristica debenture = new Caracteristica();
			debenture.caracteristicas = linha.split(";");
			pilha.add(debenture);
			for (int p = 0; p < pilha.size(); p++) {
				for (int i = 0; i < debenture.caracteristicas.length; i++) {
					if (i == debenture.caracteristicas.length-1) {
						String pontuacao = ".";
						System.out.print(pilha.get(p).caracteristicas[i]+ pontuacao);
					}
					else{
						String pontuacao = " ";
						System.out.print(pilha.get(p).caracteristicas[i]+ pontuacao);
					}
				}
				System.out.println("");
			}
		}
		long fim = System.currentTimeMillis();
		long total = fim - inicio;
		System.out.println("Tempo Total: "+total);
	}
}
Criado 2 de agosto de 2011
Ultima resposta 8 de ago. de 2011
Respostas 12
Participantes 5