Adicionar elementos de um arquivo para uma lista

10 respostas
J

boa noite
estou com um problema para adicionar elementos em uma lista

import java.io.*;
import java.util.*;

class lista{
  String Data,Competicao,Pais,Vencedor;
  double Ponto,Premiacao;
  
  public lista(String d,String c,String pa,double po,double pe,String v){
     this.Data=d;
	 this.Competicao=c;
	 this.Pais=pa;
	 this.Ponto=po;
	 this.Premiacao=pe;
	 this.Vencedor=v;
  
  }
   
   public String Getdata(){return Data;}
   public void Setdata(String Data){this.Data=Data;	}
   
   public String GetCompeticao(){return Competicao;}
   public void SetCompeticao(String Competicao){this.Competicao=Competicao;}
   
   public String GetPais(){return Pais;}
   public void SetPais (String Pais){this.Pais=Pais;}
   
   public double GetPonto(){return Ponto;}
   public void SetPonto(double Ponto){this.Ponto=Ponto;}
   
   public double GetPremiacao(){return Premiacao;}
   public void SetPremiacao(double Premiacao){this.Premiacao=Premiacao;}
   
   public String GetVencedor(){return Vencedor;}
   public void SetVencedor (String Vencedor){this.Vencedor=Vencedor;}
   
   public String toString(){
     return this.Data=Data+" "+this.Competicao+" "+this.Pais+" "+this.Ponto+" "+this.Premiacao+" "+this.Vencedor;}
   }

   
public class ad2{
public static void main(String[] args) throws IOException {
 BufferedReader in1 = new BufferedReader(new FileReader("atp.txt"));
 List <lista> l = new ArrayList<lista>();
 String s1;
 String[] p1;
 int j=0;
 int i=0;
  try {
     while((s1=in1.readLine())!=null){ j++;  }		
		System.out.println(j);			
	 lista [] t2=new lista[j];	
      
     while((s1=in1.readLine())!=null){	//esta parte e simplesmente ignorada nao da erro de copilaçao eo arquivo ta certo tanto quem em cima ele consegue contar as linhas do arquivo
       p1=s1.split("/"); 
	   t2[i]=new lista(p1[i],p1[i+1],p1[i+2],Double.parseDouble(p1[i+3]),Double.parseDouble(p1[i+4]),p1[i+5]);
	    i++; }
		   
         for(int x=0;x<=j;x++){
          l.add(t2[x]);}	
          
        		  
			  
       if(s1 == null){ in1.close();}     
          }catch (Exception e){System.out.println("Excecao\n");}
		 
		 System.out.println(l); 
		   
		  
        }
      }

o resultado do codigo e esse
18
exececao

[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,]
nao esta preenchendo o vetor nem adicionando para a lista

10 Respostas

nel

1 - Edente seu código, está bem complicado de entender.

2 - Nomes de classes iniciam sempre com letra maiúscula

3 - Métodos iniciam com letras minúsculas, assim como variáveis (exceção de constantes)

Após estas dicas realmente importantes, apenas imprimir “excecao” nos diz absolutamente, nada.
Dê um “e.printStackTrace()” para que possamos ter ideia do tipo de exceção que você está tendo.

Abraços

J

o excecao e padrao imprimir meu problema esta nesse codigo

while((s1=in1.readLine())!=null){	//le todas as linhas do arquivo
     p1=s1.split("/"); 
       System.out.println(p1);//imprimiria a primeira linha do arquivo

	t2[i]=new lista(p1[i],p1[i+1],p1[i+2],Double.parseDouble(p1[i+3]),Double.parseDouble(p1[i+4]),p1[i+5]);//passaria os dados para o vetor
	     i++; }
		   
         for(int x=0;x<=j;x++){	
          l.add(t2[x]);}//passaria para a lista

o arquivo e desse tipo

02.01.12/Brisbane/Australia/250/434250.0/Andy Murray
02.01.12/Chennai/India/250/398250.0/Milos Raonic
02.01.12/Doha/Qatar/250/1024000.0/Jo Wilfried Tsonga
09.01.12/Heineken Open/New Zealand/250/398250.0/David Ferrer

so que quando chega ali nao roda

F

Tira o primeiro while e ve o que acontece.

J

imprimi a 1º linha mais assim msm nao passa para o vetor

F

Cara, essa sua lógica tá meio louca hahahaha.
Coloca um e.printStackTrace() no seu catch. Vc vai ver que está dando um ArrayIndexOutOfBounds. Olha o que vc está fazendo. tá usando o “i” para pegar as strings do split, mas vc tá sempre incrementando o “i”. Por isso tá estourando o array p1.

Mas explica o que vc quer fazer, que acho que vc vai ter que mudar essa lógica aí.

EDIT: Quanto ao primeiro while que falei para vc tirar. Vc leu o arquivo e não o fechou, por isso não conseguiria ler de novo.

J

no caso eu quero passar dado por dado para o vetor tipo lista depois passar para um list da biblioteca java,realmente o i esta errado mas msm assim o erro seri repetir os dados
no caso era para ser assim

while((s1=in1.readLine())!=null){ j++;  }        
        System.out.println(j);  // aqui ele determina a quantidade de linhas do arquivo          
     lista [] t2=new lista[j];   //coloca o tamanho do  array
        
     while((s1=in1.readLine())!=null){   
       p1=s1.split("/");   
// o vetor t2 recebe no caso 02.01.12/Brisbane/Australia/250/434250.0/Andy Murray  que corresponde a data/competição/pais/pontos/premiação/competidor dados  aqui realmento eu me confundi na logica mas assim acho que da para entender pois a linha ser dividida em 6 partes
       t2[i]=new lista(p1[0],p1[1],p1[2],Double.parseDouble(p1[3]),Double.parseDouble(p1[4]),p1[5]);  
        i++; }

assim eu queria abastecer alista com esse codigo

for(int x=0;x<=18;x++){ l.add(t2[x]);}
so que so entra a 1º linha

F

Pelo que entendi, cada linha do seu arquivo vai ser um objeto lista, e aí vc quer adicionar este objeto no arrayList. É isso?

Dá uma olhada nesse código e vê se é isso que vc quer.

public static void main(String[] args) throws FileNotFoundException { BufferedReader in1 = new BufferedReader(new FileReader("oi.txt")); List<Lista> l = new ArrayList<Lista>(); String s1; String[] p1; try { while ((s1 = in1.readLine()) != null) { p1 = s1.split("/"); for (String s : p1) { System.out.println(s); } l.add(new Lista(p1[0], p1[1], p1[2], Double.parseDouble(p1[3]), Double.parseDouble(p1[4]), p1[5])); } in1.close(); System.out.println(l); } catch (Exception e) { e.printStackTrace(); } }

J

vlw era isso msm q eu qria,so mais uma duvida teria como eu imprimir so algum dado da lista ,no caso so os nomes atraves do get
valeu

F

Sim, é só iterar a lista.

for (int i = 0; i < l.size(); i++) { System.out.println(l.get(i).getNome()): }

Ou ainda pode usar o for aprimorado:

for (Lista list : l) { System.out.println(list.getNome()); }

J

vlw deu certinho
agora vou ter que ordenar e se for igual ordenar por outro criterio
so DEUS msms
mas vlw msm

Criado 1 de maio de 2012
Ultima resposta 2 de mai. de 2012
Respostas 10
Participantes 3