El archivo existe y el directorio IS, pero listFiles () devuelve null

La documentación para File.listFiles() sugiere que null será SOLAMENTE devuelto en el caso de que el archivo que lo llama no es un directorio.

Tengo lo siguiente:

 String dir = "/storage/emulated/0"; File f = new File(dir); Log.v("Files",f.exists()+""); Log.v("Files",f.isDirectory()+""); Log.v("Files",f.listFiles()+""); 

El registro lee:

 true true null 

Por alguna razón, listFiles( ) devuelve null aunque el File se reconoce como un directorio válido. No estoy muy familiarizado con el comportamiento de la jerarquía de archivos de Android, así que supongo que el problema radica en eso.

Como referencia, estoy depurando en mi Moto X, y los resultados son los mismos si el teléfono está conectado a mi computadora o no – por lo que no creo que tenga que ver con el montaje cuando está conectado.

7 Solutions collect form web for “El archivo existe y el directorio IS, pero listFiles () devuelve null”

Para aquellos con este problema, agregue esto a AndroidManifest.xml:

 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

Problema resuelto: D

EDIT: Si esto no funciona sólo asegúrese de que si la ruta es correcta

De la documentación del archivo 'listFiles': Devuelve null si esta ruta abstracta no indica un directorio o si se produce un error de E / S.

Así que tal vez se produjo un error de E / S. Compruebe los permisos en ese directorio, ¿el usuario que ejecuta el programa java tiene el permiso para leer ese directorio? Si no, hay su respuesta. Si lo hacen, tal vez el directorio esté vacío.

BTW no deberías usar + "" para convertir algo en una cadena, es una mala práctica ya que es más lento que String.valueOf. Yo usaría StringUtils de apache para unir esa matriz en una cadena, pero eso requiere agregar ese jar a tu classpath.

Para aquellos con este problema que le dé permiso de lectura, agregue esto a AndroidManifest.xml:

 android:name="android.permission.READ_EXTERNAL_STORAGE" 

Y también debe conceder permiso de

Configuración> Aplicaciones> "Nombre de tu aplicación" > Permisos> almacenamiento

Para la versión android > 23 , necesita dar permiso de tiempo de ejecución mediante programación en el método onresume como a continuación,

 public final String[] EXTERNAL_PERMS = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE }; public final int EXTERNAL_REQUEST = 138; requestForPermission(); public boolean requestForPermission() { boolean isPermissionOn = true; final int version = Build.VERSION.SDK_INT; if (version >= 23) { if (!canAccessExternalSd()) { isPermissionOn = false; requestPermissions(EXTERNAL_PERMS, EXTERNAL_REQUEST); } } return isPermissionOn; } public boolean canAccessExternalSd() { return (hasPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)); } private boolean hasPermission(String perm) { return (PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(this, perm)); } 

Mi problema era que por alguna razón el atributo android: sharedUserId = "android.uid.system" no permitía que la aplicación leyera / sdcard / en un dispositivo específico.

Como solo necesitaba hacer una prueba rápida, eliminé el atributo sharedUserId, lo probé y lo volví a agregar.

Simplemente agregue el permiso en el uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" manifiesto uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" y su problema será resuelto.

En el archivo de manifiesto en la sección <uses-permission .... > , agregue esta línea android:name="android.permission.READ_EXTERNAL_STORAGE" . Creo que esto puede resolver su problema.

  • Obtener permiso error java.lang.SecurityException: Permiso de denegación en 3.x dispositivos Android al obtener el nombre del archivo adjunto de correo electrónico
  • Permisos múltiples de Android 6.0
  • Phonegap permisos de Android, config.xml y complementos
  • Advertencias Su apk está utilizando permisos que requieren una política de privacidad: (android.permission.READ_PHONE_STATE)
  • Solicitud de permiso de cámara con Android SDK 23
  • Java.io.FileNotFoundException (permiso denegado) Al intentar escribir en el sdcard de Android
  • ¿Cómo comprobar si se da el permiso "android.permission.PACKAGE_USAGE_STATS"?
  • El permiso ACCESS_COARSE_LOCATION da una precisión de torre celular en Android
  • No se puede mover una aplicación a la tarjeta SD
  • Permiso: INJECT_EVENTS para Instrumenation a otras aplicaciones
  • SecurityException: Permiso Negación: lectura (sólo en emulador)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.