FileFilter com Expressão Regular

Prezados colegas,

Estou desenvolvendo um aplicativo que precisa “varrer” um diretório e armazenar em um ArrayList o nome dos arquivos encontrados, mediante um critério estabelecido através de expressão regular. Segue o código abaixo:

import java.util.regex.Pattern;
import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;
import java.io.File;
import java.io.FileFilter;
import java.util.Iterator;

class ListaArquivosExpressaoRegular {

	private static final String expressao = "0[1-2]\_[0-9]{4}\_[0-9]{3}\_[0-9]{5}\_[0-9]{4}\_[0-9]{5}\_[0-9]{5}.(TXT|WAV|MP3|JPG|GIF|PNG|AVI|MPG)";


    public List<File> listarArquivos (String nomeDiretorio, String expressaoRegular)
    {
        final Pattern pat = Pattern.compile (expressaoRegular, Pattern.CASE_INSENSITIVE);

        return Arrays.asList (new File (nomeDiretorio).listFiles(new FileFilter()
        {
             public boolean accept (File pathname)
             {
                   return !pathname.isDirectory() && pat.matcher (pathname.getName()).matches();
              }
        }));
    }



    public static void main (String[] args) {

        ListaArquivosExpressaoRegular lear = new ListaArquivosExpressaoRegular();

		String nomeArquivo = "";

		ArrayList<File> arquivos = new ArrayList<File>(lear.listarArquivos (".", expressao));


	        Iterator it = arquivos.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());
		}

    }
}

O que ocorre é que na lista de arquivos está sendo incluído o diretório corrente e a barra separadora. Estou precisando somente do nome dos arquivos armazenados no ArrayList.

Exemplo:

Preciso que a lista seja conforme a abaixo (sem usar substring…):

01_0001_000_00000_0001_00000_00000.txt
01_0001_000_00000_0001_00000_00000.jpg
01_0001_000_00001_0001_00000_00000.avi
01_0001_000_00002_0001_00000_00000.wav

e estou obtendo:

.\01_0001_000_00000_0001_00000_00000.txt
.\01_0001_000_00000_0001_00000_00000.jpg
.\01_0001_000_00001_0001_00000_00000.avi
.\01_0001_000_00002_0001_00000_00000.wav

Alguém pode dar uma ajuda?

Atenciosamente,

Augusto Cesar Nunes

Você pode utilizar o “FilenameFilter” o accept dele tem um parametro File e outro String que é o nome do arquivo.

Abraço t+

Acho que isso resolve.

Tah imprimindo assim pq vc tah chamando o toString() implicitamente.

Iterator<File> it = arquivos.iterator(); 

while (it.hasNext()) {  
   System.out.println(it.next().getName());  
} 

Flw

Valeu !!! Obrigado aí pela ajuda! Funcionou 100%.

Abraços,

Augusto