pathPattern para hacer coincidir la extensión de archivo no funciona si existe un período en otro lugar en el nombre del archivo?

Veo numerosos ejemplos del uso de pathPattern para definir un filtro de intención para una extensión / tipo de archivo específico; por ejemplo, pathPattern=".*\\.xyz" .

Desafortunadamente, esto no parece funcionar correctamente si el archivo en cuestión tiene un punto en otro lugar de la ruta; por ejemplo “my.filename.xyz”.

¿Hay una syntax pathPattern que coincida con “myfilename.xyz” y “my.filename.xyz”?

El equipo de Android eligió una forma desafortunada de implementar pathPattern. Puede ver cómo se implementa la coincidencia de patrones en la clase android.os.PatternMatch:

https://github.com/android/platform_frameworks_base/blob/master/core/java/android/os/PatternMatcher.java

Estamos acostumbrados a * trabajar como lo hace en una expresión regular, donde el * partido es codicioso y coincidirá con tantos personajes como sea posible. En la implementación de PatterMatch, el partido no es codicioso. . * Coincidirá con tantos caracteres como sea posible, hasta que encuentre una coincidencia para el siguiente carácter de la cadena.

Ejemplo:

Cadena: “/mnt/my.file.mytype”
pathPattern: “. * \\. mytype”

El “. *” En pathPattern coincidirá con la subcadena “/ mnt / my” y, por lo tanto, no coincidirá con la cadena.

Dada esta limitación, no veo una forma de escribir un pathPattern que pueda hacer coincidir cualquier cadena que termine en “.mytype”. Lo mejor que puede hacer es seguir la solución de Jason para agregar patrones adicionales que coincidan con tantos puntos como quiera especificar patrones.

Se encontró con el mismo problema al tratar de abrir un archivo en una carpeta de puntos. Descubrí que podía simplemente agregar múltiples elementos de “datos”, dependiendo de cuántos puntos esperaba tener en mis rutas:

      

Feo, sin embargo. Alguien sabe una mejor manera?