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(",");
}
@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;
}
}
class TesteFileFilter {
public static void main(String[] args) {
JFileChooser jfc = new JFileChooser();
jfc.setFileFilter (new Filtro ("BV arquivos", "TXT,txt"));
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(",");
}
@Override
public boolean accept(File f) {
for (int i = 0; i < 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 (".").listFiles (new Filtro ("TXT,txt"));
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 {
};