ConcurrentModifiedException lançada

1 resposta
N

Boa tarde pessoal, esse é um código que lista os arquivos de uma pasta, e para cada arquivo dessa pasta, ele confere com os arquivos presentes em uma lista, se tiverem nomes comuns, confere se são diretórios, se for, chamada recursiva, chama um método para comaprar diretórios(Se for preciso posto logo depois), se eles tiverem o mesmo nome e for arquivo, confere se houve modificações, se o arquivo da pasta tiver sido modificado o arquivo da lista é deletado e é acrescentado a lista, o arquivo da pasta.

public ArrayList<File> atualizarLista(ArrayList<File> lista, File pasta)
    {
        File[] listaPasta = pasta.listFiles();
        
        for(File f1 : listaPasta)
        {
            int chave = 1;
            if(lista.isEmpty())
            {
                lista.add(f1);
            }
            else
            {
              for(File f2 : lista)
              {
                 if(f1.getName().equals(f2.getName()))
                 {
                    if(f1.isDirectory() && f2.isDirectory())
                    {
                        lista.remove(f2);
                        lista.addAll(comparaDiretorio(f1, f2));
                        chave = 0;
                    }
                    else
                    {
                        if(f1.lastModified() != f2.lastModified())
                        {
                            lista.remove(f2);
                            lista.add(f1);
                            chave = 0;
                        }
                    }
                }
            }
             if(chave == 1)
             {  
                 lista.add(f1);
             }
            }
        }
        return lista;
    }

A exceção ConcurrentModificationException é lançada, creio eu por remover o f2 durante o comando for, mas não consigo solucionar.
Sou novo na área, espero que possam me ajudar.

Agradeço desde já.

1 Resposta

nel

Oi!

Usa o iterator se quiseres remover um item da lista.
Algo como:

Iterator<File> itHosts = lista.iterator();
		while(itHosts.hasNext()) {
			itHosts.remove();
		}

Abraços.

Criado 5 de agosto de 2011
Ultima resposta 5 de ago. de 2011
Respostas 1
Participantes 2