manipulação de arquivos com erro

5 respostas
F

Galera eu to fazendo um exemplo de manipulação de 2 arquivos e vendo se um cnpj esta dentro do outro arquivo, mas o metodo contains parece nao esta funcionando corretamente, porque?

package br.com.fecomerciodf;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

public class main {
	
	private ArrayList lista1 = new ArrayList();
	private ArrayList lista2 = new ArrayList();
	private ArrayList lista3 = new ArrayList();
	
	public static void main(String[] args) throws IOException {
			main m = new main();
			m.arquivo();
		
	}
	
	public void arquivo() throws IOException{
		

		FileReader empresas1 = new FileReader("C:\Documents and Settings\felipe\Desktop\confederativa.txt");//empresas da fecomercio
		BufferedReader empresa1 = new BufferedReader(empresas1); // entrada de dados
		
		
		FileReader empresas2 = new FileReader("C:\Documents and Settings\felipe\Desktop\cnpjconfederativa.txt");//empresas da fecomercio
		BufferedReader empresa2 = new BufferedReader(empresas2); // entrada de dados cnpj
		
		
				
		String linha1;
		while ((linha1 = empresa1.readLine()) != null) {
			lista1.add((String)linha1);

		}
		
		String linha2;
		while ((linha2 = empresa2.readLine()) != null) {
			lista2.add((String)linha2);

		}
	String l2;	
	for(int i=0;i&lt lista2.size();i++){
		l2=(String) lista2.get(i);
		 if(lista1.contains(l2))
			 lista3.add(l2);
		
	}
	System.out.println("lista com nome e cnpj  "+lista1.size());	
	System.out.println("lista so com cnpj  "+lista2.size());
	System.out.println("repetidos  "+lista3.size());
		
	}

}

deveriam aparecer alguns cnpjs na lista 3 mas nao aparece nenhum!!

O arquivo lista1 contem o cnpj e alguns dados e o lista 2 so contem o cnpj mesmo!!

Falow!!!

5 Respostas

Luiz-SP

contains compara Object e não Strings, o que deve tá acontecendo é que ele compara as referências e não o valor da String, vc tem de dar um jeito de usar equals para comparar Strings…

cassio

Ah… o que nosso amigo falou sobre comparar endereço e não o conteúdo faz sentido :slight_smile: Verifique isso com calma. Outra coisa é que se cada linha da lista1 contém mais que o cnpj, então vc teria que entrar em cada uma das linhas e verificar se ela não possui nenhums dos cnpj da lista 2… ou a ordem é inversa, lista 1 na lista 2?! Enfim, a idéia é essa… hehehe
Você poderia fazer isso com dois laços aninhados, mas vai ficar meio lento hein…

dudaskank

estranho isso…

Ou seja, ele usa o método equals, da string mesmo, que compara os valores, e não se é o mesmo objeto.

Essas outras informações além do cnpj estão em outras linhas separadas?

Luiz-SP

Engraçado, no Javadoc da 1.4.2 o método contains da ArrayList tá assim:

contains

public boolean contains(Object elem)

    Returns true if this list contains the specified element.

    Specified by:
        contains in interface List
    Overrides:
        contains in class AbstractCollection

    Parameters:
        elem - element whose presence in this List is to be tested. 
    Returns:
        true if the specified element is present; false otherwise.

dá um olhada

http://java.sun.com/j2se/1.4.2/docs/api/java/util/ArrayList.html#contains(java.lang.Object)

De onde vc tirou esse javadoc?

F

Ja resolvi galera, eu botei um for interno pra pegar a outra lista, ai comparou de boa!!

valeu!!!

Criado 15 de setembro de 2006
Ultima resposta 15 de set. de 2006
Respostas 5
Participantes 4