Como eu faço para selecionar um diretório com FileChooser

Ai pessoal, alguém sabe como eu faço pra selecionar um diretório com o FileChooser e ele pegar o que está dentro do diretório (por exemplo só os gifs). E ainda contar quantas gifs tem no diretório. Valeu desde já ! :wink:

Olá,

Utilize o método getSelectedFile() do JFileChooser que retorna um File (diretório ou arquivo)

O método listFiles() da classe File retorna um array de objetos File dentro de um diretório.

Você pode um passar um FileFilter para listFiles para filtrar apenas os tipos de arquivos desejados.

Maiores detalhes em:
http://java.sun.com/j2se/1.4.2/docs/api/index.html

http://java.sun.com/docs/books/tutorial/uiswing/components/filechooser.html

http://javaalmanac.com/egs/javax.swing.filechooser/pkg.html

Para criar um FileFilter:
http://javaalmanac.com/egs/javax.swing.filechooser/Filter.html[/url]

Acho que pode ajudar,

Nilton

Ola…
tenta isso…

File tmpFile = new File(NOME_DO_ARQUIVO); //ISSO EH CASO VC QUEIRA QUE A JANELA ABRA COM UM NOME DEFAULT...
JFileChooser fileChooser = new JFileChooser( /tmp );
                fileChooser.addChoosableFileFilter( new AudioFilter("gif","gif") );
                fileChooser.setSelectedFile(tmpFile);
                fileChooser.setFileSelectionMode( JFileChooser.FILES_ONLY );
                
                int result = fileChooser.showOpenDialog( this );
                if( result == JFileChooser.CANCEL_OPTION )  return;
                
                File file = fileChooser.getSelectedFile();
                if ( file.exists() ){
                    file.delete();
                    file = fileChooser.getSelectedFile();
                }
                if( file.getName().equals("")) {
                    JOptionPane.showInternalMessageDialog( this,
                    "Nome de Arquivo Inválido", "Mensagem",
                    JOptionPane.ERROR_MESSAGE );
                    fileChooser.setSelectedFile(tmpFile);
                }
                
                FileWriter writer = new FileWriter(file.toString());
                PrintWriter saida = new PrintWriter(writer);

MAS PARA TANTO… PARA QUE CONSIGA MOSTRAR OS ARQUIVOS .GIF VC VAI TER QUE IMPLEMENTAR A SEGUINTE CLASSE…

private class AudioFilter extends FileFilter {
        
        public AudioFilter(String argExt, String argDescription ){
            ext = argExt;
            description = argDescription;
        }
        
        public boolean accept(File f) {
            if (f.isDirectory()) {
                return true;
            }
            String extension = getExtension(f);
            if (extension != null) {
                if( ext.equals("*")) {
                    return true;
                }
                else if (extension.equals(ext) ) {
                    return true;
                } else {
                    return false;
                }
            }
            return false;
        }
        
        //The description of this filter
        public String getDescription() {
            return description ;
        }
        
        private String getExtension(File f) {
            String tmpExt = null;
            String s = f.getName();
            int i = s.lastIndexOf('.');
            
            if (i > 0 &&  i < s.length() - 1) {
                tmpExt = s.substring(i+1).toLowerCase();
            }
            return tmpExt;
        }
        private String ext = "*";
        private String description = "Todos Arq";
    }

ESPERO TER AJUDADO…
BEIJOS…

[size=“11”][color=“red”]* Editado: Lembre-se de utilizar BBCode em seus códigos - Matheus [/color][/size] :joia:

Oi fbelmira,

Peguei seus códigos mas não consegui utilizá-los.

Estou com um projeto onde o objetivo é montar um album de fotos, mas estou com grande dificuladade de atribuir a ação ao botão que abre o fileChooser. Como eu mensionei, necessito que no fileChooser eu só possa escolher as pasta e ele abrisse só os .gif .jpg e ainda necessito saber quandos imagens possui esse diretório para que eu possa fazer a paginação, eu sei que tem um método listFiles() mas não cheguei a estudá-lo.
:wink:

Oi cassiano, para vc usar o meu codigo, vc teria que modificar algumas coisa pois algumas coisa, como objetos, estavam default…
Estou mandando o codigo com comentarios linha-a-linha para vc ver o que tem que mudar para rodar…
Esse codigo vc coloca no metodo do botão que vc quer que abra, assim la vai…

int result = fileChooser.showOpenDialog( this );
if( result == JFileChooser.CANCEL_OPTION ) return;
//nao precisa mudar nada aqui, isso eh somente precausao, verificação.

File tmpFile = new File(NOME_DO_ARQUIVO);
//Essa linha vc so precisa, caso queira colocar um nome default como arquivo para salvar ou abrir, o parametro NOME_DO_ARQUIVO tem que ser uma String com esse nome, tipo “foto1.jpg”.

JFileChooser fileChooser = new JFileChooser( /tmp );
// desculpe pelo parametro pois nao ficou bem claro, mas aqui voce coloca uma String, indicando o diretorio que voce quer que a janela abra, por exemplo “C:/Documentes/Fotos”.

fileChooser.addChoosableFileFilter( new AudioFilter(“gif”,“gif”) );
// o parametro new AudioFilter(“gif”,“gif”), são os filtros, os TIPOS de arquivos que estão no diretorio que vc quer que apareca, caso vc queira mais de um tipo, vc acrescenta essa linha sendo que com o tipo que quer, por exemplo: fileChooser.addChoosableFileFilter( new AudioFilter(“jpg”,“jpg”) ); e assim por diante… esse AudioFilter eh a classe que vc implementou (que esta logo abaixo) e pode ser implementada do jeitinho que mandei pra vc, sem mudar nada e pode ser implementada no mesmo arquivo dessas…

o resto do codigo vc pode implementar igual, sem mudar nada, pois tenho certeza que vai funcionar, pois isto eh parte do codigo de um sistema meu que abre numa boa…

Agora quanto a dizer o numero de arquivos, sugiro que neste metodo
voce coloque um contador e o metodo Java que faz esse tipo de contagem, e no titulo dessa janela voce informe a quantidade.
Mudar o titulo vc pode usar o seguinte codigo…

FileChooser.openDialogTitleText ("Quantidade: " + quant);
quant seria a quantidade de arquivos…

mais uma vez espero que ajude…