Saltar al contenido

Uso de FilenameFilter

Solución:

Debería anular accept en el interfaz FilenameFilter y asegúrese de que el parámetro name solo tiene caracteres numéricos. Puede verificar esto usando matches:

String[] list = dir.list(new FilenameFilter() {
    @Override
    public boolean accept(File dir, String name) {
        return name.matches("[0-9]+");
    }
});

preferiblemente como una instancia de una clase interna anónima pasada como parámetro a la lista File #.

por ejemplo, para enumerar solo los archivos que terminan con la extensión .txt:

File dir = new File("/home");
String[] list = dir.list(new FilenameFilter() {
    @Override
    public boolean accept(File dir, String name) {
        return name.toLowerCase().endsWith(".txt");
    }
});

Para enumerar solo los archivos cuyos nombres de archivo son números enteros de exactamente 2 dígitos, puede usar lo siguiente en el método de aceptación:

return name.matches("\d{2}");

para uno o más dígitos:

return name.matches("\d+");    

EDITAR (como respuesta al comentario de @ crashprophet)

Pasar un conjunto de extensiones de archivos a la lista

class ExtensionAwareFilenameFilter implements FilenameFilter {

    private final Set<String> extensions;

    public ExtensionAwareFilenameFilter(String... extensions) {
        this.extensions = extensions == null ? 
            Collections.emptySet() : 
                Arrays.stream(extensions)
                    .map(e -> e.toLowerCase()).collect(Collectors.toSet());
    }

    @Override
    public boolean accept(File dir, String name) {
        return extensions.isEmpty() || 
            extensions.contains(getFileExtension(name));
    }

    private String getFileExtension(String filename) {
        String ext = null;
        int i = filename .lastIndexOf('.');
        if(i != -1 && i < filename .length()) {
            ext = filename.substring(i+1).toLowerCase();
        }
        return ext;
    }
}


@Test
public void filefilter() {
    Arrays.stream(new File("D:\downloads").
        list(new ExtensionAwareFilenameFilter("pdf", "txt")))
            .forEach(e -> System.out.println(e));
}

Desde Java 8, simplemente puede usar una expresión lambda para especificar su filtro personalizado:

dir.list((dir1, name) -> name.equals("foo"));

En el ejemplo anterior, solo los archivos con el nombre “foo” pasarán. Utilice su propia lógica, por supuesto.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *