JFileChooser escolher todos arquivos dentro de pastas e subpastas

    private void jButton3_actionPerformed(ActionEvent e) {
        File[] files;
        final JFileChooser chooser = new JFileChooser();
        final FileNameExtensionFilter filter = new FileNameExtensionFilter(
                                        "Somente arquivos PHP", "php" );
        chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); 
        chooser.setFileFilter(filter);
        final int returnVal = chooser.showDialog(null, "Escolher Pasta Raiz");

        if (returnVal == JFileChooser.APPROVE_OPTION) {

            try {
                files = chooser.getSelectedFiles();
            } catch (final Exception ioException) {
                ioException.printStackTrace();
            }

        } else {
                
        }
    }

Como pegar todos os arquivos selecionando uma pasta raíz e dentro desta pasta raíz suas subpastas selecionar todos arquivos com extensão .php ?

Após selecionar a pasta, use o método list da classe File para listar o seu conteúdo.

Uma funçãozinha recursiva já resolve. Ou você pode usar a nova bliblioteca de arquivos do Java 7:
http://docs.oracle.com/javase/tutorial/essential/io/fileio.html

    public void copiarArquivos(Path origem, Path destino) throws IOException {
      // se é um diretório, tentamos criar. se já existir, não tem problema.
      if(Files.isDirectory(origem)){
        Files.createDirectories(destino);
     
        // listamos todas as entradas do diretório
        DirectoryStream entradas = Files.newDirectoryStream(origem);
     
        for (Path entrada : entradas ) {
          // para cada entrada, achamos o arquivo equivalente dentro de cada arvore
          Path novaOrigem = origem.resolve(entrada.getFileName());
          Path novoDestino = destino.resolve(entrada.getFileName());
     
          // invoca o metodo de maneira recursiva
          copiarArquivos(novaOrigem, novoDestino);
        }
      } else {
        // copiamos o arquivo
        Files.copy(origem, destino);
      }
    }

Ocorreu um erro na linha 09.

for (Path entrada : entradas ) {

Error(207,29): incompatible types

Não estou conseguindo resolver o erro.

onde consegui o tutorial:

Tentou usar o método list da classe File, como indiquei por primeiro?

[quote=paulo_1981]
Ocorreu um erro na linha 09.

for (Path entrada : entradas ) {

Error(207,29): incompatible types

Não estou conseguindo resolver o erro.

onde consegui o tutorial:

http://blog.caelum.com.br/evolucao-do-java-io-ao-ni/[/quote]

resolvi o problema da linha substituindo por:

        DirectoryStream<Path> entradas = Files.newDirectoryStream(origem);

    private void btnPastaRaiz_actionPerformed(ActionEvent e) {

        final JFileChooser chooser = new JFileChooser();
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
        final int returnVal = chooser.showDialog(null, "Escolher Pasta Raiz");

        if (returnVal == JFileChooser.APPROVE_OPTION) {

            try {
                fileOrigem = chooser.getSelectedFile().getAbsolutePath();
                fieldPastaRaiz.setText(chooser.getSelectedFile().getAbsolutePath());
                Path dir = Paths.get(fileOrigem);

                try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {
                    for (Path file2: stream) {
                        System.out.println(file2.getFileName());
                    }
                } catch (IOException | DirectoryIteratorException x) {
                    // IOException can never be thrown by the iteration.
                    // In this snippet, it can only be thrown by newDirectoryStream.
                    System.err.println(x);
                }
            } catch (final Exception ioException) {
                ioException.printStackTrace();
            }

        } else {
                
        }
    }

    private void btnPastaSaida_actionPerformed(ActionEvent e) {
        
        final JFileChooser chooser = new JFileChooser();
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
        
        final int returnVal = chooser.showDialog(null, "Escolher Pasta de Saída");

        if (returnVal == JFileChooser.APPROVE_OPTION) {

            try {
                fileDestino = chooser.getSelectedFile().getAbsolutePath();
                fieldPastaSaida.setText(chooser.getSelectedFile().getAbsolutePath());
                
            } catch (final Exception ioException) {
                ioException.printStackTrace();
            }

        } else {
                
        }
    }
    
    public void copiarArquivos(Path origem, Path destino) throws IOException {
      // se é um diretório, tentamos criar. se já existir, não tem problema.
      if(Files.isDirectory(origem)){
        Files.createDirectories(destino);
     
        // listamos todas as entradas do diretório
        DirectoryStream<Path> entradas = Files.newDirectoryStream(origem);
          
        for (Path entrada : entradas ) {
          // para cada entrada, achamos o arquivo equivalente dentro de cada arvore
          Path novaOrigem = origem.resolve(entrada.getFileName());
          Path novoDestino = destino.resolve(entrada.getFileName());
     
          // invoca o metodo de maneira recursiva
          copiarArquivos(novaOrigem, novoDestino);
        }
      } else {
        // copiamos o arquivo
        Files.copy(origem, destino);
      }
    }

    private void btnExecutar_actionPerformed(ActionEvent e) {
        Path origem = Paths.get(fileOrigem);
        Path destino = Paths.get(fileDestino);

        try {
            Files.walkFileTree(origem, new CopiadorDeArquivos(origem, destino));
        } catch (IOException f) {
            f.printStackTrace();
        }
    }
package phpguard;

import java.io.IOException;

import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;

public class CopiadorDeArquivos extends SimpleFileVisitor {
  private Path origem;
  private Path destino;
 
  public CopiadorDeArquivos(Path origem, Path destino) {
    this.origem = origem;
    this.destino = destino;
  }
 
  public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
          throws IOException {
    copiaPath(dir);
    return FileVisitResult.CONTINUE;
  }
 
  public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
          throws IOException {
    copiaPath(file);
    return FileVisitResult.CONTINUE;
  }
 
  private void copiaPath(Path entrada) throws IOException {
    // encontra o caminho equivalente na árvore de cópia
    Path novoDiretorio = destino.resolve(origem.relativize(entrada));
    Files.copy(entrada, novoDiretorio);
  }
}


O código agora está assim, acho que vamos chegar lá bem rápido.

Meu Deus não acredito funcionou !!!

Obrigado !!!

Legal, e ainda usando NIO 2. :slight_smile: