File.listFiles

3 respostas
RenataFA

Olá pessoal!

Estou com um probleminha… vejam o trechinho do código:

File diretorio = new File("coloco aqui o caminho do meu diretorio"); File[] arquivos = diretorio.listFiles(); // uso um FileFilter aqui, mas não vem ao caso, uso apenas pra pegar tudo que tiver a extensão .xml
Agora imaginem que dentro do tal diretório que eu indiquei, eu tenha MUITOS arquivos, sei lá, aqui to testando com 1200.
Qdo executa o comando listFiles() ele dá OutOfMemory, estouro da memória Heap.

Queria saber se alguém tem alguma idéia de como resolver. Pra mim resolveria completamente se apenas eu pudesse “falar” pro listFiles() que eu quero os 100 primeiros arquivos, ai na próxima vez eu pego outros 100 e assim por diante. Mas não achei como fazer isso.

Ah, eu não sei o nome dos arquivos ok? Por isso não tem como eu montar um for e ir pegando um a um… alguma idéia?

Brigada,
Renata

3 Respostas

T

Hum… o pessoal do Java já viu que isso é um problema. Infelizmente eles só vão ter uma correção para isso no Java 7:

java.nio.file.DirectoryStream

Por enquanto você vai ter de aumentar a memória disponível para rodar seu programa com a opção -Xmx, ou então listar os seus arquivos com algum comando do DOS ou do Unix, redirecionar a saída desse comando para um arquivo-texto, e ler o tal arquivo. Muito porco mas deve funcionar por enquanto.

Mero_Aprendiz

Olá Renata.
Bem, eu voto por trabalhar arquivo por arquivo, já que tem como pegar os nomes dos arquivos nos diretório:

String[] arquivos = new File("/Diretorio").list()

Assim você por ir trabalhar arquivo por arquivo, já que carregar 1.200 e um tanto complicado dependo do servidor.
Também porco, mas enquanto o Java 7 não sai…

[]'s
JL

RenataFA

Dá no msm Mero_Aprendiz, posso estourar o tamanho do array da msma forma!

thingol! Que tristeza, não tem jeito msm? :cry:

Criado 2 de junho de 2009
Ultima resposta 2 de jun. de 2009
Respostas 3
Participantes 3