Listar todos os arquivo de uma pasta por extensão (csv)

Preciso listar todos os arquivos de uma pasta por extensão, abaixo segue meu código da main e da classe que tem o método que lista:

import java.io.File;

public class TesteListagemArquivos {

	public static void main(String[] args) {

			File raiz = new File("C:\\Users\\Renato\\Desktop\\CURSOS");
		
			ListaDiretorio lista = new ListaDiretorio();
			
		lista.listaDiretorio(raiz);

	}

}

Esta é a classe que contem o método:

import java.io.File;

public class ListaDiretorio {

	public void listaDiretorio(File raiz) {

		System.out.println(raiz.getName());

		for (File f : raiz.listFiles()) {
			if (f.isFile() && f.getName().endsWith("css"))
				System.out.println(f.getName());
			else
				listaDiretorio(f);
		}

	}

}

Quando rodo chega até a listar alguma coisas, mas da este erro abaixo:

CURSOS
20180328-EB-Confluent_Designing_Event_Driven_Systems.pdf
Exception in thread "main" java.lang.NullPointerException
	at br.com.alura.gerenciador.servlet.ListaDiretorio.listaDiretorio(ListaDiretorio.java:11)
	at br.com.alura.gerenciador.servlet.ListaDiretorio.listaDiretorio(ListaDiretorio.java:15)
	at br.com.alura.gerenciador.servlet.TesteListagemArquivos.main(TesteListagemArquivos.java:13)

Alguém pode me ajudar? Outra dúvida é como ficaria isto numa JSP ou seja como listar arquivos de uma pastar e exibi-las numa JSP e permitir o download destes arquivos via front-end desta página.

Testei seu código aqui e esse NullPointerException deve ter acontecudo por conta de talvez ter invocado o método listFiles num arquivo e não numa pasta.

Veja como fiz aqui:

public void listaDiretorio(File raiz) {
	if (raiz.isDirectory()) {
		for (File f : raiz.listFiles()) {
			listaDiretorio(f);
		}
	} else {
		if (raiz.getName().endsWith("css")) {
			System.out.println(raiz.getName());
		}
	}
}
1 curtida

Exemplo utilizando FileFilter:

public static void listarDiretorio(File diretorio, final String extensao) {
	File[] filhos = diretorio.listFiles(filho -> filho.isDirectory() ? true : filho.getName().endsWith(extensao));
	if (filhos != null) {
		for (File filho : filhos) {
			if (filho.isDirectory()) {
				listarDiretorio(filho, extensao);
			} else {
				System.out.println(filho.getName());
			}
		}
	}
}
1 curtida

Boa noite.
Perdão, meu português não é muito bom.
Eu escrevi dois métodos.

  • getDirs Retorna uma listagem de pastas.
  • getFiles Retorna uma listagem de arquivos.

Eu não usaria “JSP”.
o “JSF” possui um componente (dataTable) para exibir dados.

Maratona JSF - O maior curso JSF do Brasil

Saudações da Argentina :argentina: :wink:

 public List<File> getDirs(File dir) {
        List<File> result = new ArrayList<>();
        File[] filesAndDirs = dir.listFiles();
        List<File> filesDirs = Arrays.asList(filesAndDirs);

        filesDirs.stream().filter((file) -> (file.isDirectory())).map((file) -> {
            result.add(file);
            return file;
        }).map((file) -> getDirs(file)).forEachOrdered((deeperList) -> {
            result.addAll(deeperList);
        });
        return result;
    }
public ArrayList<File> getFiles(String dir, FilenameFilter filtro) {
        ArrayList<File> vUrls = new ArrayList<>();
        File directorio = new File(dir);

        if (directorio.exists() && directorio.isDirectory()) {
            File[] jars = directorio.listFiles(filtro);
            vUrls.addAll(Arrays.asList(jars));
        }
        return vUrls;
    }
public void test() {
      final String PASTA = "C:/lixo/";
        final String EXT = "jpg";

        FilenameFilter filtro = (File dir, String name) -> name.toLowerCase().endsWith("." + EXT);

        List<File> listDir = getDirs(new File(PASTA));
        List<File> listOUT = new ArrayList<>();

        for (int i = 0; i < listDir.size(); i++) {
            listOUT.addAll(getFiles(listDir.get(i).getAbsolutePath(), filtro));
        }

        for (int i = 0; i < listOUT.size(); i++) {
            System.out.println(listOUT.get(i).getAbsolutePath());
        }
    }

Muito obrigado, vou estudar mais…

Muito obrigado, vou o seu código é muito limpo e fácil de entender. Parabéns!!!