0 votos

Hola, a ver si alguien me puede ayudar con este problema que tengo para que me detecte si existe una Carpeta y un Archivo dentro de la carpeta “Documents” de la memoria externa.

 

Estoy utilizando Android 11, y parece esta versión ya no deja crear carpetas en la memoria externa, así que voy a cambiar todas las carpetas y archivos dentro de la carpeta “Documents” 

 

Pero me encuentro con el problema que no me detecta ninguna carpeta de las que he puesto dentro de “Documents”

 

He concedidos los permisos de lectura y escritura, y el código para detectar si existe una carpeta o archivo que estoy probando ahora es este (lo he cambiado varias veces y con ninguno he conseguido nada):

File CarpetaVarios = new File( Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS) + “/Varios Documentos” );

if (!CarpetaVarios.exists()) {
	//muestra mensaje que no existe la carpeta/archivo
{

Me puede ayudar alguien para detectar tanto archivos como carpetas dentro de la carpeta “Documents” ?

 

Gracias.

por en Java

1 Respuesta

0 votos

Comprueba si existe la carpeta Documents, pues no tiene porqué existir y si no existe la tendrás que crear:

File carpetaDocumentos = new File(Environment.getExternalStorageDirectory() + "/Documents");

if (!carpetaDocumentos.exists()) {
    carpetaDocumentos.mkdir();
}

Por otro lado, te recomiendo que eches un vistazo a los siguientes ejemplos de crear y leer ficheros: https://developer.android.com/training/data-storage/shared/documents-files

por


Hola Ramon, si que existe, pero ya veo donde esta el problema, y no sé porque ahora no se puede.
No es que este muy puesto, y todavía me queda mucho que aprender, pero es algo que no me esperaba, llevo varios días intentando leer un pdf que esta dentro de una carpeta que se encuentra dentro de Documents, la estoy cambiando ahí porque Android 11 no permite leer en otras carpetas que estén creadas en la raíz de la memoria externa, o al menos yo no sé.

El caso es que esa carpeta tiene el signo menos delante del nombre, por ejemplo “- Varios”, el poner el signo – es para que esa carpeta se muestre la primera cuando se liste la carpeta, ya que al salir ordenadas aparece la primera.

Pues bien, eso parece que ahora con Android 11 no funciona, porque si le quito el signo – si detecta la carpeta y su contenido.

He intentado ver si ese signo es uno signo es un carácter especial que no se puede poner, y no he encontrado nada.

Bueno, no se si puedes probarlo y ver si a ti te pasa igual, al menos a mi si tiene el signo menos no me funciona en Android 11

Un saludo.

 
 
Android cambió bastante la política de leer y crear ficheros, principalmente por protección de los datos privados de los usuarios.

Por lo que comentas, puede que sea un tema de reconocimiento de carácter Unicode, el símbolo menos (-) es el carácter "U+002D", puedes probar a ver si con esto te lo distingue.
Pero como se tendria que poner para mostar el (-), si pongo como:

String signoMenos = "U+002D";

lo que devuelve son esos mismos caracteres, y si quito las comillas muestra un error.

 

Editado: te lo pregunto ya por curiosidad, para ver como se puede poner, porque igual en algún momento pueda interesar poner es o otro carácter, porque estoy pensando que si voy a tener que pasar el trabajo para cambiarlo en bastantes sitios, igual no interese por si tarde o temprano, vuelva a cambiar algo y tenga que volver a corregirlo,

 

Un saludo

En Java puedes poner en String los caracteres unicode como:

String signoMenos = "\u002D";