Lendo e formatando arquivo txt usando POO

2 respostas
A

Bom pessoal, eu tenho uma dúvida quanto tratar(ler e visualizar) um arquivo em ".txt" no Java!
O Arquivo contem essa estrutura aqui...

p.José Bonifácio
f.11111111
f.22222222
p.Dom Pedro II
f.33333333
Onde:
p.= indica que a linha possui o nome de uma pessoa
f.= indica que a linha possui um telefone pertencente à pessoa lida no momento

Em segundo lugar criei uma classe Pessoa e a outra Fones ,para que as informações do arquivos sejam armazenadas nos objetos necessários e que depois seja mostrada em JOptionPane da seguinte maneira:

José Bonifácio [11111111] [22222222]
Dom Pedro II [33333333]

No caso eu possuo 3 duvidas!
1 - um método que faça identificar que "p." é nome e que "f." é Telefone e fazê-los nao aparecer no JOptionPane(aparecer somente o nome e os numeros)
2 - alguma "coisa" que saiba idetificar dentro do programa quantos numeros cada pessoa tem
3 - o método que faça com que faça o JOption Pane faça pra tratar o arquivo de uma maneira, e que faça ele aparecer de outra!!

Segue embaixo o codigo com o Main e as Classes Pessoa e Fones que já foram codificadas!
Desde já agradeço

Classe Fone
public class Fones {

    private String numero;

    public String getNumero() {
        return numero;
    }

    public void setNumero(String numero) {
        this.numero = numero;
    }


}
Classe Pessoa
import java.util.Vector;

public class Pessoa {

    private Vector<Fones> listaFones;
    private String nome;

    public Vector<Fones> getListaFones() {
        return listaFones;
    }

    public void setListaFones(Vector<Fones> listaFones) {
        this.listaFones = listaFones;
    }

    public String getNome() {
        return nome;
    }

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

    
}
Main Como vcês podem ver no Main, ele apenas lê o arquivo e mostra o que contem nele, sem formatação nenhuma!
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JOptionPane;

public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here

        String var="";
        try{
            BufferedReader in = new BufferedReader(new FileReader("d:\\MeuArquivo-Exercicio.txt"));
            String str;
            while(in.ready()){
                str=in.readLine();
                var+=str+"\n\r";
            }
            in.close();
        }catch(IOException e){

        }
        JOptionPane.showMessageDialog(null, var,"Informação do Sistema",JOptionPane.INFORMATION_MESSAGE);
    }

}

2 Respostas

A

Bem pessoal eu já consegui fazer uma manipulação de string onde eu consigo verificar o que é Pessoa e o que é Fone e assim ir direcionando cada uma a seu objeto
Ficou mais ou menos assim

package exerciciopoo001;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JOptionPane;

public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here

        String var="";
		Pessoa p = new Pessoa();
		Fones f = new Fones();
        try{
            BufferedReader in = new BufferedReader(new FileReader("d:\\MeuArquivo-Exercicio.txt"));
            String str;
            while(in.ready()){
                str=in.readLine();
				if(str.startsWith("p."){ //se a string começar com p. identifica como pessoa e utiliza o setNome
					System.out.println("Nome");
					p.setNome(str.substring(2));
					}else{
						if(str.startsWith("f."){ //se a string começar com f. identifica como fone e utiliza o setFone
							System.out.println("Fone");
							f.setNumero(str.substring(2));
						}
					}
							
                var+=str+"\n\r";
            }
            in.close();
        }catch(IOException e){

        }
        JOptionPane.showMessageDialog(null, var,"Informação do Sistema",JOptionPane.INFORMATION_MESSAGE);
    }

}

Agora minha duvida quanto ao Array de Telefones,e se eu terei que usar um Vetor[Nome][Fones] para fazer o JOptionPane listar com a formatação desejada!
Alguem me dá uma luz?

charleston10

Por que vocês sofrem tanto?

Já existe classes prontas pra isso, por exemplo, leitura de arquivo CSV que nada mais é que um TXT compativel
com banco de dados e com a maioria dos programas que leem tabela, por exemplos o pacote Office.

A classe CSVREADER faz todo esse papel

import com.csvreader.CsvReader;
import com.csvreader.CsvWriter;

Procurem por esse Jar na internet que voces acham rapidinho.

Enfim ja fiz isso aqui o site junto com o arquivo e documentação
[url]http://www.jarvana.com/jarvana/view/net/sourceforge/javacsv/javacsv/2.0/javacsv-2.0.jar!/com/csvreader/CsvReader.class?classDetails=ok[/url]

Qual é o intuito dessa classe? Manipular dados de um arquivo de texto como se fosse um banco de dados, que na verdade se torna um BD em Txt.
É desse modo que alguns backups exportam seus dados para txt e depois da pra fazer essa importação.

Vou dar um exemplo de como eu usei.

No metodo abaixo eu recebo um parametro de entrada que é nome da coluna que eu quero ler, e ele vai retornar todos os dados dessa coluna, por exemplo,
seu eu colocar coluna Cliente, vai ser retornada uma lista com todos os clientes na minha "base de dados txt" que o modo correto de se dizer é CSV.

public List<String> LerCSV(String coluna) throws IOException, Exception{

        List<String> retorno = new ArrayList<String>();

        try {

            CsvReader csv = new CsvReader(caminho);

            csv.setDelimiter(';');
            csv.readHeaders();            

            while(csv.readRecord()){
               int i = 0;

               for(int j=0;j<csv.getHeaderCount();j++){
                   String[] header = null;
                   header[j] = criptografia.Descriptografar(csv.getHeader(j));
                   if(header[j].equals(coluna)){
                        retorno.add(csv.get(coluna));
                   }
               }               
               i++;
            }


        } catch (FileNotFoundException ex) {
            Logger.getLogger(CSV.class.getName()).log(Level.SEVERE, null, ex);
        }

        return retorno;
    }

Eu achei interessante usar em meu sistema, criptografia no arquivo já que é um txt e ele pode ser visualizado por qlqr um..
Se voces perceberem, a maioria dos programas que baixamos e que eles armazenam informações eles usam dessa metodologia para
guardar as informações; ao acessarmos a pasta desse programa e abrimos um arquivo veremos que nao conseguirimos ler, pois é feito desse
modo, Armazena Informação Criptografada e o Software faz a Leitura.

enfim, pesquisem..

;]

Criado 28 de fevereiro de 2013
Ultima resposta 28 de fev. de 2013
Respostas 2
Participantes 2