Ajuda - Como listar e selecionar arquivo aleatório?

2 respostas Resolvido
Thiagotpsantos

Gostaria de criar uma rotina que liste os arquivos .txt do diretório corrente e escolha um aleatório, alguém poderia me auxiliar?

2 Respostas

staroski
Solucao aceita

Eu não devia, mas vou postar um exemplo pronto…

import java.io.File;
import java.io.FileFilter;
import java.util.Random;

public class Exemplo {

	public static void main(String[] args) {
		try {
			File pasta = new File(System.getProperty("user.dir"));
			String extensao = ".txt";
			File arquivoAleatorio = listarArquivoAleatorio(pasta, extensao);
			System.out.printf("arquivo selecionado: \"%s\"%n", arquivoAleatorio.getAbsolutePath());
		} catch (Throwable t) {
			t.printStackTrace();
		}
	}

	static File listarArquivoAleatorio(File pasta, final String extensao) {
		if (pasta == null || !pasta.isDirectory()) {
			throw new IllegalArgumentException("Pasta inválida: \"" + pasta + "\"");
		}
		if (extensao == null || extensao.isEmpty()) {
			throw new IllegalArgumentException("Extensão inválida: \"" + extensao + "\"");
		}
		File[] arquivos = pasta.listFiles(new FileFilter() {

			@Override
			public boolean accept(File f) {
				return f.getName().toLowerCase().endsWith(extensao);
			}
		});
		return arquivos.length < 1 ? null : arquivos[new Random().nextInt(arquivos.length)];
	}
}
Thiagotpsantos

Opa, obrigado.

O professor só achou relevante ensinar até a gravação/leitura de arquivo, pois no próximo semestre trabalharemos com BD, porém estava com vontade de me aprofundar um pouco mais utilizando arquivos mesmo.

Se não for abusar da sua paciência o comando:

"return arquivos.length < 1 ? null : arquivos[new Random().nextInt(arquivos.length)]; "

Poderia me explica-lo para mim um pouco melhor?
Eu entendi o que faz, mas não como faz.

Muito obrigado pela ajuda.

Criado 18 de outubro de 2016
Ultima resposta 18 de out. de 2016
Respostas 2
Participantes 2