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:
- Excepción de tiempo de ejecución de clase intermitente de Android no encontrada
- Manejo de excepciones de Android
- Manejar excepciones de CursorLoader
- Manejador de errores por defecto de RxJava
- SQLiteConstraintException no detectado
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
- manejar excepciones no controladas en Android
- Cómo capturar excepciones generadas con código nativo que se ejecuta en Android
- JSONException: no hay valor para XYZ al intentar getString ("XYZ")
- Utilización de Try Catch Manejo de excepciones o comprobaciones explícitas
- Cómo manejar graciosamente la excepción dentro de AsyncTask en Android?
- En Java, si un puntero nulo sucede muy raramente es mejor usar catch en lugar de if
- Android: evitar el bloqueo de la aplicación debido a errores no controlados
- Cómo implementar uncaughtException android
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.