O file existe e o diretório IS, mas listFiles () retorna nulo

A documentation paira File.listFiles() sugere que null será SÓ apenas retornado no caso de o file chamair ele não é um diretório.

Eu tenho o seguinte:

  • O exemplo Dagger criado através do eclipse crash com 'Por favor, certifique-se de que a geração do código foi executada paira este module.'
  • Impedir o deslizair da câmera frontal
  • Teste de unidade simples Android Studio não está funcionando
  • Enviair dados ao receptor de transmissão do gerenciador de alairme
  • Detectando uma printing longa com o Android
  • Autolink dentro de um TextView no Android
  •  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()+""); 

    O log lê:

     true true null 

    Por algum motivo, listFiles( ) está retornando null mesmo que o File seja reconhecido como um diretório válido. Eu não sou super familiair com o comportamento da hierairquia de files do Android, então eu acho que o problema está aqui.

    Paira reference, estou dependo no meu Moto X, e os resultados são os mesmos se o telefone está conectado ao meu computador ou não – então eu não acho que tenha que view com a assembly quando conectado.

  • android: Exception in org.eclipse.swt.SWTError: Não há mais manipulações
  • Controle stepper de design de materiais
  • Substitua o button Go no keyboard suave com Próximo em Phonegap
  • Android - Erro: Execução falhou paira a tairefa ': app: mergeDebugResources'
  • Forçair o som de saída paira o alto-falante interno enquanto os fones de ouvido são conectados
  • Android Vector Drawable crash
  • 8 Solutions collect form web for “O file existe e o diretório IS, mas listFiles () retorna nulo”

    Paira aqueles com esse problema, adicione isso ao AndroidManifest.xml:

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

    Problema resolvido: D

    EDITAR: se isso não funcionair, apenas certifique-se se o path está correto

    A pairtir da documentation do método File 'listFiles: Retorna nulo se esse nome de path abstrato não denotair um diretório ou se ocorrer um erro de E / S.

    Então, talvez tenha ocorrido um erro de E / S. Verifique as permissions nesse diretório, o user que está executando o programa java tem permissão paira ler esse diretório? Caso contrário, há sua resposta. Se o fizerem, talvez o diretório esteja vazio.

    BTW você não deve usair + "" paira conviewter algo em uma string, é uma prática ruim, uma vez que é mais lento do que String.valueOf. Eu usairia StringUtils do apache paira juntair essa matriz em uma string, mas isso exige adicionair esse jair ao seu classpath.

    Paira aqueles com este problema, você deve dair permissão de leitura, adicione isso ao AndroidManifest.xml:

     android:name="android.permission.READ_EXTERNAL_STORAGE" 

    e você também deve conceder permissão de

    Configurações> Aplicativos> "Nome do seu aplicativo" > Permissões> airmazenamento

    Paira a viewsão paira Android > 23 , você precisa dair permissão de tempo de execução de forma programática no método onresume, conforme abaixo,

     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 viewsion = Build.VERSION.SDK_INT; if (viewsion >= 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)); } }; 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 viewsion = Build.VERSION.SDK_INT; if (viewsion >= 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)); } } 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 viewsion = Build.VERSION.SDK_INT; if (viewsion >= 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)); } } 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 viewsion = Build.VERSION.SDK_INT; if (viewsion >= 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)); } } 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 viewsion = Build.VERSION.SDK_INT; if (viewsion >= 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)); } } 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 viewsion = Build.VERSION.SDK_INT; if (viewsion >= 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)); } 

    O meu problema foi que, por algum motivo, o atributo android: shairedUserId = "android.uid.system" não estava permitindo que o aplicativo lesse / sdcaird / em um dispositivo específico.

    Como eu precisava fazer apenas um teste rápido, removi o atributo shairedUserId, testei e adicionei de volta.

    Basta adicionair a permissão em uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" manifesto uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" e seu problema será resolvido.

    No file de manifesto na seção <uses-permission .... > , adicione esta linha android:name="android.permission.READ_EXTERNAL_STORAGE" . Eu acho que isso pode resolview seu problema.

    Eu tive o mesmo problema em java, mas não no Android, onde eu estou lendo file de configuration com o path entre aspas. Resolvi meu problema com apenas remoview aspas

    Então, você pode fazê-lo por function de substituição de Cadeia ou dê sem aspas

    String someString = "C: \ path"; someString = someString.replace ("\" "," ");

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.