Informações de arquivos em um JTable

Galera… tenho um problema

Quero selecionar um diretório (…\pasta) e não um caminho de um arquivo (…\pasta\arquivo) em um JFileChooser… é possivel?

Apos escolher o diretório, queria que o mesmo mostrasse em um JTable os arquivos contidos neste diretório… mostrando os dados de cada arquivo, mostrar somente JPG, JPEG, BMP, GIF: nome, tamanho, extenção e dimenção…

Agradeço a quem puder ajudar!
Um abraço!

Use o setFileSelectionMode da classe JFileChooser para fazer com que sejam listados apenas os diretórios.
Depois use o método list() da classe File para pegar todos os arquivos do diretório.

Obs.: aqui no fórum há diversos tópicos sobre isso.
Um dos que encontrei:

http://www.guj.com.br/posts/list/5930.java#29504

Documentação do método list():

http://java.sun.com/j2se/1.4.2/docs/api/java/io/File.html#list()

Muito Obrigado David / Tiago / Conceição…

ahuahuauha!

Muito obrigado cara…!
Um abraço… vou implementar e já já posto!

De nada.
Dúvidas poste ai!

David / Tiago / Conceição,

Como usar o método list() da File?

Olhe, criei meu próprio modelo do JTable:

[code]public class ArquivosModel extends AbstractTableModel{

private ArrayList listaArquivos = new ArrayList();

public int getRowCount() {
    return listaArquivos.size();
}

public int getColumnCount() {
    return 4;
}

public Object getValueAt(int rowIndex, int columnIndex) {
    //
    Arquivo arquivos = (Arquivo) listaArquivos.get(rowIndex);
    switch(columnIndex){
        case 0: return arquivos.getNome();
        case 1: return arquivos.getTamanho();
        case 2: return arquivos.getDimensao();
        case 3: return arquivos.getExtensao();
        default: return null;
    }
}

}[/code]

Agora como capturo em um ArrayList cada arquivo em um determinado caminho? e como coloca-lo na JTable?

veja o método:

[code]public ArrayList ConsultaArquivo(String caminho){

    ArrayList<Arquivo> resultado = new ArrayList<Arquivo>();
    Arquivo registro = new Arquivo();
    
    try{
        
        
    }catch(IOException e){
        e.printStackTrace();
    }
}[/code]

Agora dentro do try eu deveria usar o método list()… como utilizalo?? não consegui encontrar nd referente!

um abraço!

Como você pode ver na documentação, o list() retorna um array de strings com o caminho dos arquivos no determinado diretório. Assim, você pode exibir este caminho, ou se quizer mais informações criar files com estes caminhos, mas ou menos como eu fiz abaixo:

import java.io.File;

public class Test {

	/**
	 * Simples demonstração do uso do método list()
	 * */
	public static void main(String[] args) {

		File arquivo = new File(&quot;c:\\&quot;);
		String[] caminhos = null;

		if (arquivo.isDirectory()) {
			caminhos = arquivo.list();
		} else {
			return;
		}

		if (caminhos == null || caminhos.length == 0) {
			// se não houver arquivo encerra
			return;
		}

		File[] arquivos = new File[caminhos.length];

		for (int i = 0; i &lt; arquivos.length; i++) {
			arquivos[i] = new File(caminhos[i]);
		}
		for (File file : arquivos) {
			System.out.println(file);
		}
	}

}

Assim, o que você precisa fazer é que seu model tenha um array de File ou de String e que este array seja atualizado sempre que um novo diretório for selecionado.

Deu certinho Tiago…

Consegui…

Já já posto a resolução… sai procurando pela net e encontrei algumas coisas q me ajudaram sob o list()!

Valeu a ajuda parcerô… outra coisa

Qual a diferença de criar um array de Strings dum de File? para esse tipo de problema?

Abraço!

Depende do seu objetivo. Se você quizer apenas exibir o caminho ou nome do arquivo, um array de String atenderia, acredito eu.
Agora se você quizer utilizar os métodos da classe File para exibir informações mais detalhadas, um array de File seria mais adequado.

Poxa…

Economizou uma pergunta, pois eu iria perguntar exatamente isto…

“Como faço para pegar as informações de casa arquivo do array?”

Valeu Cara… obrigado!

[tópico resolvido]

Model

[code]public class ArquivosModel extends AbstractTableModel{

private ArrayList listaArquivos = null;
String[] colunas = null;   


ArquivosModel(ArrayList arrayArquivos, String[] colunas) {
    setLinha(arrayArquivos);
    setColuna(colunas);
}

public void setLinha(ArrayList linha){
    this.listaArquivos = linha;
}

public void setColuna(String[] coluna){
    this.colunas = coluna;
}

public ArrayList getLinhas(){
    return listaArquivos;
}

public String[] getColunas(){
    return colunas;
}


public int getRowCount() {
    return listaArquivos.size();
}

public int getColumnCount() {
    return 4;
}

@Override
public String getColumnName(int col){
    return colunas[col];
}

public Object getValueAt(int rowIndex, int columnIndex) {
    //
    Arquivo arquivos = (Arquivo) listaArquivos.get(rowIndex);
    switch(columnIndex){
        case 0: return arquivos.getNome();
        case 1: return arquivos.getTamanho();
        case 2: return arquivos.getDimensao();
        case 3: return arquivos.getExtensao();
        default: return null;
    }
}

}
[/code]

método para retornar os arquivos e suas informações em um ArrayList

[code]public ArrayList consultaArquivo(String caminho){

    ArrayList<Arquivo> arrayFile = new ArrayList<Arquivo>();
  
    
    File arquivo = new File(caminho);
    //filtro, capturando somente arquivos com extensao .jpg         
    FilenameFilter filtro = new FilenameFilter(){
        public boolean accept(File arquivo, String name) {
            return name.endsWith("jpg");
        }
    };
    
    //resultado recebe lista de arquivos .jpg contidos em um diretório.
        File[] resultado = arquivo.listFiles(filtro);
        
        if(resultado==null){
           JOptionPane.showMessageDialog(null, "Nenhum arquivo JPG disponível neste diretório");               
        }else{
           for(int i=0;i<resultado.length;i++){
               
               Arquivo registro = new Arquivo();
              
               registro.setNome(resultado[i]);
               registro.setTamanho(resultado[i]);
               registro.setDimensao(resultado[i]);
               registro.setExtensao("jpg");                   
               
               arrayFile.add(registro);
           }
        }            
        return arrayFile;
}[/code]

função do botão… (Selecionar diretório)

[code]JFileChooser Caminho = new JFileChooser();
Caminho.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

        //se clicar em Abrir...
            if (Caminho.showOpenDialog(this)==JFileChooser.APPROVE_OPTION) {                    
                        
                      jLabel5.setText(Caminho.getSelectedFile().getPath());
                      ArrayList lista = consultaArquivo(Caminho.getSelectedFile().getPath());
                      String[] colunas = new String[]{"Nome","Tamanho","Dimensão","Extensão"};
                      ArquivosModel model = new ArquivosModel(lista, colunas);
                      jTable1.setModel(model);
            }[/code]