2011-04-14 5 views
5

quiero escribir en Java o menos así:en Java utilizando marcas de asterisco y de interrogación para que coincida con el nombre de un archivo

public class MyMatcher 
{ 
    public static boolean isMatching(String filename, String param) { 
     ... 
    } 
} 

nombre de archivo sería el nombre de un archivo sin el directorio (por ejemplo: readme .txt, shares.csv, una buena canción.mp3, ...)

param sería algo así como "* .mp3" para decir todos los archivos que terminan en .mp3 y así sucesivamente.

Nota: param no es una declaración de expresiones regulares es más como la forma habitual de buscar archivos como textpad o eclipse o incluso el dos dir.

¿Alguien puede sugerir cómo hacerlo o si hay alguna biblioteca de código abierto para hacer esto?

+0

Así que el parámetro puede ser "* .m 3?"? –

Respuesta

2

Apache Commons IO tiene un WilcardFileFilter:

El coincidencias de comodín utiliza los caracteres '?' y '*' para representar un carácter comodín simple o múltiple.

Ejemplo del javadoc:

File dir = new File("."); 
FileFilter fileFilter = new WildcardFileFilter("*test*.java~*~"); 
File[] files = dir.listFiles(fileFilter); 
for (int i = 0; i < files.length; i++) { 
    System.out.println(files[i]); 
} 
+0

Gracias, comprobaré esto. – chacko

5
String pattern = param.replaceAll ("\\*", ".*").replaceAll ("\\?", "."); 
return filename.matches (pattern); 
+0

No funcionará como se espera en caso de que la cadena coincidente ya sea una expresión regular o contenga símbolos especiales de expresiones regulares. Ejemplo: "my. *. Mp3" coincidirá no solo con "my.somefile.mp3", sino también con "myxsomefile.mp3" y "myxsomefilexmp3". – Scadge

+0

Sí. Si tiene tales casos, será necesario un manejo más sofisticado. –

Cuestiones relacionadas