filenamefilter ejemplo java file-io java-io

ejemplo - filenamefilter java



Uso de FilenameFilter (3)

Debe sobrescribir accept en la interfaz FilenameFilter y asegurarse de que el name del parámetro tenga solo 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]+"); } });

Tengo un directorio:

File dir = new File(MY_PATH);

Me gustaría enumerar todos los archivos cuyo nombre se indica como cadenas de números enteros, por ejemplo, "10", "20".
Sé que debería usar:

dir.list(FilenameFilter filter);

¿Cómo definir mi FilenameFilter ?

PD Quiero decir que el nombre del archivo podría ser cualquier cadena entera, por ejemplo, "10" o "2000000" o "3452345". No hay restricción en el número de dígitos, siempre y cuando el nombre del archivo sea una cadena entera.


Lo hago como:

File folder = new File("."); File[] listOfFiles = folder.listFiles(); for (File file : listOfFiles) { if (file.isFile()) { if (file.toString().endsWith(".sql")) { System.out.println(file.getName()); } } } System.out.println("End!!");


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

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 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+");

EDIT (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)); }