Gostaria de criar uma rotina que liste os arquivos .txt do diretório corrente e escolha um aleatório, alguém poderia me auxiliar?
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)];
}
}
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.