Mkdirs aways devuelve false en Android 5.1

Busqué estos temas, pero no pude resolverlo. Por favor, ayúdame a resolver este problema

Ese es mi código mkdir:

File _sdcardPath = Environment.getExternalStorageDirectory(); // sdcard path is /storage/emulate/0 File _dirPath = new File(_sdcardPath, "CreateFolder"); boolean _isCreate = _dirPath.mkdir(); if (_isCreate) { tvResult.append(_dirPath + " mkdir success"); } else { tvResult.append(_dirPath + " mkdir fail"); } 

My manifest.xml:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.createfolder" android:versionCode="1" android:versionName="1.0" > <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-sdk android:minSdkVersion="11" android:targetSdkVersion="21" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

La versión de mi dispositivo android es: 5.1.1, 12GB de espacio libre, y el código se ejecuta de forma regular en 5.0

Al ejecutar la aplicación me encontré con esta excepción:

 android.system.ErrnoException: mkdir failed: EACCES (Permission denied) when I debug step into File.mkdirs 

Compruebe DocumentFile para acceder a SDcard desde android 4.4 y superior. Más detalles en este enlace

OP recordó agregar la excepción a su pregunta. Esta respuesta ya no es relevante.

No le está dando una nueva carpeta para crear. Prueba esto en su lugar:

 ... File _dirPath = new File(_sdcardPath + "/CreateFolder"); ... 

Encontré que no hay nada malo en tu código. Basándome en mkdir () y en este archivo doc , creo que la carpeta existía.

False en caso de fallo o si el directorio ya existía.

Significa el siguiente código:

 File _dirPath = new File(_sdcardPath, "CreateFolder"); boolean _isCreate = _dirPath.mkdir(); 

Sólo intenta (re) crear la carpeta existente /storage/emulate/0 , por lo tanto, devuelve false .

Para crear una nueva carpeta, pruebe esto:

 File _dirPath = new File(_sdcardPath + "/CreateFolder"); boolean _isCreate = _dirPath.mkdir();// this will create folder CreateFolder 

Ver más

Compruebe si /storage/emulate/0/CreateFolder existe antes de mkdir así:

 File _sdcardPath = Environment.getExternalStorageDirectory(); File _dirPath = new File(_sdcardPath, "CreateFolder"); final boolean dirExisted = _dirPath.exists(); if (dirExisted && _dirPath.isFile()) { _dirPath.delete(); } if (dirExisted) { tvResult.append(_dirPath + " dir existed"); return; } boolean _isCreate = _dirPath.mkdir(); if (_isCreate) { tvResult.append(_dirPath + " mkdir success"); } else { tvResult.append(_dirPath + " mkdir fail"); } 

Si la trayectoria existe un file , intente delete . Si es un dir , ninguna necesidad de crearlo más.

  • Excepciones de Android que manejan la mejor práctica?
  • Cómo corregir NPE en ViewRoot # updateBidiOptions?
  • Androide. La mejor manera de informar al desarrollador de las excepciones lanzadas
  • La excepción es NULL siempre
  • Detectar la excepción de AsyncTask. Necesito pensar
  • ¿Ha perdido la traza de la pila de excepciones en Google Analytics v2 para Android?
  • Manejadores de excepciones globales en Java
  • Necesidad de manejar excepción no captada y enviar archivo de registro
  • Uso de la gestión de excepciones globales en android
  • Evitar intentar / capturar en Android
  • Tratar las excepciones (de proceso cruzado) en el proveedor de contenido personalizado de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.