Problema ao filtrar arquivos dentro de um diretorio

Olá estou tentando filtrar determinados arquivos que estão presentes dentro de um diretorio mas não estou conseguindo.

Estou tentando usar este código, pois com a Classe FileNameExtensionFilter também não da certo.

final class Filtro extends javax.swing.filechooser.FileFilter {

            String[] extensoes;
            String descricao;

            public Filtro(String descricao, String extensoes) {
                this.descricao = descricao;
                this.extensoes = extensoes.split(",");
            }

            @Override
            public boolean accept(File f) {
                for (int i = 0; i < extensoes.length; i++) {
                    if (f.getName().endsWith(extensoes[i])) {
                        return true;
                    }
                }
                return false;
            }

            @Override
            public String getDescription() {
                return descricao;
            }
        }
        
        this.arquivos = abrir("dir", "Selecione o diretório de entrada.",
                JFileChooser.DIRECTORIES_ONLY).listFiles(new Filtro("BV arquivos", "TXT,txt"));

Ele não deixa eu compilar acusando um erro ao adicionar o novo objeto Filtro como parametro em listFiles, ENTRETANTO o parametro aceito por este metodo tem de ser herdado da classe FileFilter, como o que estou fazendo na classe Filtro. Realmente não sei porque ele não deixar passar o Filtro como parametro.

Alguma idéia ?

import java.io.*;
import javax.swing.*;


class Filtro extends javax.swing.filechooser.FileFilter {
    
    String[] extensoes;  
    String descricao;  

    public Filtro(String descricao, String extensoes) {  
        this.descricao = descricao;  
        this.extensoes = extensoes.split(&quot;,&quot;);  
    }  

    @Override  
    public boolean accept(File f) {  
        for (int i = 0; i &lt; extensoes.length; i++) {  
            if (f.getName().endsWith(extensoes[i])) {  
                return true;  
            }  
        }  
        return false;  
    }  

    @Override  
    public String getDescription() {  
        return descricao;  
    }
}

class TesteFileFilter {
    public static void main(String[] args) {
        JFileChooser jfc = new JFileChooser();
        jfc.setFileFilter (new Filtro (&quot;BV arquivos&quot;, &quot;TXT,txt&quot;));
        int returnVal = jfc.showOpenDialog(null);
    }
}

Uai - não é para usar listFiles, e sim setFileFilter.

Então, você entendeu errado, não é em um JFileChooser que eu tenho que usar o filtro e sim ao pegar todos os arquivos que comecam com txt dentro de determinado diretorio.

Digamos isto

File dir = new File("diretorio");
File[] arquivos = dir.listFiles("txt");

Entendeu? E dentro da classe File não existe um setFileFilter, mas existe o listFiles que aceita um parametro FileFilter, mas do modo que estou fazendo (criando uma classe que herda o FileFilter) ele acusa erro na compilação.

abraço.

File.listFiles requer um java.io.FileFilter, não um javax.swing.filechooser.FileFilter. Os nomes são iguais, o que dá origem a confusões.

È foi mesmo confusão, entretanto não consigo fazer a classe herdar do java.io.FileFilter (nem existe esta classe), o que é estranho porque a documentação diz que existe.

java.io
Interface FileFilter

public interface FileFilter

A filter for abstract pathnames.

Instances of this interface may be passed to the listFiles(FileFilter) method of the File class.

Since:
1.2

Ou não sei como usar interfaces padroes do java, não é só extender e implementar os metodos necessarios ?

abraço.

É claro que não existe uma classe FileFilter. Existe uma interface FileFilter.
http://java.sun.com/javase/6/docs/api/java/io/FileFilter.html

Vou dar um exemplo.

import java.util.*;
import java.io.*;
import javax.swing.*;


class Filtro implements java.io.FileFilter {
    
    String[] extensoes;  

    public Filtro(String extensoes) {  
        this.extensoes = extensoes.split(&quot;,&quot;);  
    }  

    @Override  
    public boolean accept(File f) {  
        for (int i = 0; i &lt; extensoes.length; i++) {  
            if (f.getName().endsWith(extensoes[i])) {  
                return true;  
            }  
        }  
        return false;  
    }  
}

class TesteFileFilter {
    public static void main(String[] args) {
        File[] filesInCurrentDirectory = new File (&quot;.&quot;).listFiles (new Filtro (&quot;TXT,txt&quot;));
        System.out.println (Arrays.asList (filesInCurrentDirectory));
    }
}

Putz é mesmo, esqueci completamente do implements, é que programo em c++ e nao existe o implements.

Vlw em.

[quote=MaikoID]Putz é mesmo, esqueci completamente do implements, é que programo em c++ e nao existe o implements.

Vlw em.[/quote]

De fato, em C++ existe só o “:” (que foi copiado para o C#). Um exemplo em C++ e outro em C++/CLR:

// C++ ---
class FileFilter {
};
class Filtro: public FileFilter {
};
// C++/CLR ---
public interface class FileFilter {
};
public ref class Filtro: public FileFilter {
};