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

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!!!