Contar a quantidade de arquivos

2 respostas
F

Estava precisando fazer uma contagem recursiva em um determinado diretório. Por exemplo, tenho o diretório:

c:\projetos\guj

Desejo saber quantos arquivos .java tem nesse diretório (recursivamente), como faria de forma mais fácil?

2 Respostas

yorgan

Uma solução é fazer um loop que acessa ele mesmo quando encontrar uma pasta.
Utilizando os métodos file.list() e file.isDirectory() acho que você mata a questão.

[]´s

victor.godinho
import java.io.File;
import java.io.FilenameFilter;
import java.util.regex.Pattern;


public class Teste {
	public static void main(String[] args) {
		new Teste();
	}
	
	public Teste() {
		File f = new File("D:\\textos");
		System.out.println(contarArquivos(f, "txt"));
	}
	
	public int contarArquivos(File path, String extensao) {
		int quantidade = 0;
		
		if ( path == null ) throw new RuntimeException("Deve ser informado um diret?io!");
		if ( !path.exists() ) throw new RuntimeException("Diret?io n? existe. ["+path.getAbsolutePath()+"]");
		if ( !path.isDirectory() ) throw new RuntimeException("Deve ser informado um diret?io. ["+path.getAbsolutePath()+"]");
		if ( !path.canRead() ) throw new RuntimeException("Sem permiss? no diret?io. ["+path.getAbsolutePath()+"]");
		
		quantidade += path.list(new FiltroArquivo(Pattern.compile(".*"+extensao))).length;
		
		File pastasDentro[] = path.listFiles(new FiltroDiretorio(Pattern.compile(".*")));
		
		for (File pastaDentro : pastasDentro)
			quantidade += contarArquivos(pastaDentro, extensao);
		
		return quantidade;
	}
	
	private class FiltroArquivo implements FilenameFilter{
		private final Pattern jexl;

		public FiltroArquivo(Pattern expressaoRegular) {
			this.jexl  = expressaoRegular;
		}

		public boolean accept(File path, String nome) {
			return jexl.matcher(nome).matches();
		}
	}
	
	private class FiltroDiretorio implements FilenameFilter{
		private final Pattern jexl;

		public FiltroDiretorio(Pattern expressaoRegular) {
			this.jexl  = expressaoRegular;
		}

		public boolean accept(File path, String nome) {
			return new File(path.getAbsolutePath()+File.separator+nome).isDirectory() && jexl.matcher(nome).matches();
		}
	}
}
Criado 5 de agosto de 2008
Ultima resposta 5 de ago. de 2008
Respostas 2
Participantes 3