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.

  • Titanium SDK 5.1.2 - Permisos de Android 6.0
  • Permiso: INJECT_EVENTS para Instrumenation a otras aplicaciones
  • Android 6: la escritura en el almacenamiento externo falla en la primera ejecución solamente
  • Permisos de Android en Runtime.getRuntime (). Exec ()
  • Negación de permisos de MediaDocumentsProvider
  • ¿Cómo dar permisos / dev / bus / usb para aplicaciones libusb android?
  • ¿Cómo puede la aplicación del sistema ubicada en / system / app tener permiso del sistema en Android 4.4 KitKat construir?
  • Android - ¿Cómo conozco todos los métodos que requieren un cierto permiso?
  • Permiso ATTR {idVendor} para dispositivos USB en linux menta para utilizar tabla mobii protab2 XXL
  • Android 6 Permisos => Crash al deshabilitar permiso y volver a la aplicación
  • Álbum de Facebook y fotos no accesibles con todos los permisos necesarios (GRAPH API)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.