una studio programacion p20 móviles lite desarrollo curso crear como celular carpetas carpeta archivos aplicaciones android filenames

studio - ¿Qué caracteres permitían los nombres de archivo en Android?



manual de programacion android pdf (6)

  1. En Android (al menos de forma predeterminada) los nombres de los archivos codificados como UTF-8.

  2. Parece que los caracteres reservados del nombre de archivo dependen del sistema de archivos montado ( http://en.wikipedia.org/wiki/Filename ).

Considerado como reservado:

private static final String ReservedChars = "|//?*</":>+[]/''";

¿Qué caracteres especiales están permitidos para los nombres de archivos en Android?

~!@#$%^&*()_+//.,

Además, ¿puedo guardar el archivo con el nombre Unicode?


De acuerdo con wiki y suponiendo que está utilizando almacenamiento de datos externo que tiene FAT32.

Caracteres permitidos en las entradas de directorio

son

Cualquier byte excepto los valores 0-31, 127 (DEL) y: "* /: <>? / | +,.; = [] (Lowcase az se almacenan como AZ). Con VFAT LFN cualquier Unicode excepto NUL


Este es el InputFilter correcto para los nombres de archivo en Android:

InputFilter filter = new InputFilter() { public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { if (source.length() < 1) return null; char last = source.charAt(source.length() - 1); String reservedChars = "?:/"*|///<>"; if(reservedChars.indexOf(last) > -1) return source.subSequence(0, source.length() - 1); return null; } };


Esto es claramente el sistema de archivos y el sistema operativo Android dependiente. En mi oneplus / oxygenOS, los únicos caracteres en la respuesta aceptada

private static final String ReservedChars = "|//?*</":>+[]/''";

que no pude usar para cambiar el nombre de un archivo fueron / y *

Sin embargo, Android de ancho, la lista anterior parece ser sensata.


Probé esto rápidamente en mi Galaxy Note 8 en Android 4.4.2. La aplicación My Files predeterminada atenúa los caracteres no válidos que son los siguientes:

? : "* | / / <>

Puse todos los otros caracteres especiales disponibles en un nombre de archivo y se guardó. Es posible que esto no sea coherente en todas las versiones de Android, así que tal vez lo mejor sea ser conservador y reemplazarlo por caracteres con significado similar.


final String[] ReservedChars = {"|", "//", "?", "*", "<", "/"", ":", ">"}; for(String c :ReservedChars){ System.out.println(dd.indexOf(c)); dd.indexOf(c); }