Listar arquivos do disco

Boa noite pessoal,

To com um problema simples, só que não entendi como resolvê-lo. É o seguinte, preciso criar uma aplicação para listar todos os arquivos existentes no disco que são de alguma extensão, *.mp3 por exemplo. Listar para o usuário para que ele selecione o arquivo que queira executar e então eu executo o arquivo selecionado.

Eu não entendi ainda como listar os arquivos, dei uma olhada na classe FileFilter mas não entendi como funciona. Se alguem puder me dar uma ajuda com essa classe, ou então me dar outra opção para listar esses arquivo eu agradeço.

Exemplo http://premier-club.com/tips/Tip/26603

furutani muito obrigado pela dica

Bom pesquisando eu cheguei nesse codigo aqui

public class Filtro implements FileFilter {

    public boolean accept(File f) {
        if (f != null
                && f.getName().toLowerCase().endsWith(".txt")) {
            return true;
        } else {
            return false;
        }
    }
}

    public static void main(String[] args) {
        
        File file = new File("C:/");

        Filtro filter = new Filtro();
        
        File[] arquivos = file.getParentFile().listFiles(filter);

        System.out.println("Listagem dos arquivos");
        for (int i = 0; i < arquivos.length; i++) {
            System.out.println("\t" + arquivos[i].getName());
        }
    }

O problema é que ele pesquisa apenas no diretório que eu passo, nesse caso “C:”. Há como fazer a pequisa em todas as subpastas?

Bom dei uma arrumada no código de forma que ele ta pesquisando em todas as pastas
Vou postar o código pra ficar mais facil

    public Vector filtrar(File[] f) {


        Vector<File> files = new Vector<File>();

        for (int index = 0; index < f.length; index++) {
            if (f != null && f[index].getName().toLowerCase().endsWith(".pdf")) {
                files.add(f[index]);
                System.out.println(f[index]+"\t"+f.length);
                break;
            } else if (f[index].isDirectory()) {
                filtrar(f[index].listFiles());
            }
        }
        return files;
    }

Mas,sempre há um mas não é!!
Esta dando um erro java.lang.NullPointerException depois que lista os arquivos as serem procurados. Creio que seja por causa da recursão, se alguém puder me dar uma ajuda eu agradeço.