Ler arquivos em uma pasta

4 respostas
rodpuc

Estou fazendo um trabalho em que o usuário deve escolher uma pasta por aquela janelinha padrão de abertura de arquivo e então fazer um processamento sobre cada arquivo dentro dessa pasta.

Minhas principais dúvidas são:
1 - como mandar pegar uma pasta (ao invés de um arquivo)
2 - como abrir CADA arquivo dentro desta pasta.

Valeu! :wink:

4 Respostas

wesley.comput

Espero que isso possa te ajudar.

import java.io.File;
import javax.swing.JFileChooser;
/*
 * Janela.java
 *
 * Created on 13 de Maio de 2008, 19:35
 */

/**
 *
 * @author  wesley
 */
public class Janela extends javax.swing.JFrame {
    private JFileChooser jFCSeletor;
    
    /** Creates new form Janela */
    public Janela() {
        initComponents();
        
    }
    
    
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Código Gerado ">                          
    private void initComponents() {
        jBtnSelecionar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jBtnSelecionar.setText("SelecionarArquivos");
        jBtnSelecionar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBtnSelecionarActionPerformed(evt);
            }
        });

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(108, 108, 108)
                .add(jBtnSelecionar)
                .addContainerGap(167, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(134, 134, 134)
                .add(jBtnSelecionar)
                .addContainerGap(143, Short.MAX_VALUE))
        );
        pack();
    }// </editor-fold>                        

    private void jBtnSelecionarActionPerformed(java.awt.event.ActionEvent evt) {                                               
        jFCSeletor = new JFileChooser();
        jFCSeletor.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); //selecione apenas diretorios
        int intEvento = jFCSeletor.showOpenDialog(null); //captura o evento que foi executado no FileChooser
        if(intEvento == JFileChooser.APPROVE_OPTION) { //verifica se o diretorio foi selecionado
            File diretorio = jFCSeletor.getSelectedFile();
            listFiles(diretorio);
        }
        
    }                                              
       
    private void listFiles(File dir) {
        File[] listFiles = dir.listFiles();
        for(File file : listFiles) {
            System.out.println(file.getName()); //faz o que quiser com o arquivo
            //file.delete(); //apaga todos os arquivos do diretorio
        }
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Janela().setVisible(true);
            }
        });
    }
    
    // Declaração de variáveis - não modifique                     
    private javax.swing.JButton jBtnSelecionar;
    // Fim da declaração de variáveis                   
    
}

Qualquer dúvida estamos ai.
abraços!

G

procure aki no guj por leitura recursiva, algo parecido uma vez tive esse problema, se tivesse o codigo aki te passava

vlws

E

Usando recusividade, você pode fazer um método “lerCaminho”, por exemplo, passando um File como parâmetro…A primeira coisa que você faz é testar se ele é um diretório. Caso o resultado seja TRUE você obtém a lista de File´s filhos dele e sumete cada um desses File ao mesmo método “lerCaminho”. Caso seja FALSE (ou seja, o File é um arquivo) você o lê e processa como quiser…Algo mais ou menos assim.

public void lerCaminho(File caminho)
{
  if(caminho.isDirectory())//É um diretório
  {
    File[] filhos = caminho.listFiles();
    for(int i=0;i<filhos.length;i++)
    {
      lerCaminho(filhos[i]);//Faz chamada recursiva do método para cada filho
    }
  }
  else
  {
    leArquivo(caminho);//É um arquivo, aqui você processo arquivo como quiser, no meu caso, chamei o método leArquivo
  }
}

Bom, fiz o código de cabeça e não testei, mas é algo por ai…Espero ter ajudado…

rodpuc

valeu wesley.comput! Era exatamente isso que eu precisava!

:thumbup:

Criado 13 de maio de 2008
Ultima resposta 19 de mai. de 2008
Respostas 4
Participantes 4