java.io.filenotfoundexception open échec eacces (permission refusée) sur le périphérique
Le code suivant qui consiste à télécharger un fichier à partir d'un serveur et de les enregistrer dans le stockage fonctionne correctement lorsque l'appareil dispose d'une mémoire de stockage interne.
Mais quand je l'ai essayé avec un appareil sans stockage interne, ainsi qu'avec stockage externe-je obtenir de l'exception suivante.
java.io.filenotfoundexception échec de l'ouverture de eacces (permission denied)
public void downloadFile(String dlUrl, String dlName) {
int count;
HttpURLConnection con = null;
InputStream is = null;
FileOutputStream fos = null;
try {
URL url = new URL( dlUrl );
con = (HttpURLConnection) url.openConnection();
con.setDoInput(true);
con.connect();
is = url.openStream();
String dir = Environment.getExternalStorageDirectory() + Util.DL_DIRECTORY;
File file = new File( dir );
if( !file.exists() ){
file.mkdir();
}
Util.LOG_W(TAG, "Downloading: " + dlName + " ...");
fos = new FileOutputStream(file + "/" + dlName);
byte data[] = new byte[1024];
while( (count = is.read(data)) != -1 ){
fos.write(data, 0, count);
}
Util.LOG_D(TAG, dlName + " Download Complete!");
} catch (Exception e) {
Util.LOG_E(TAG, "DOWNLOAD ERROR = " + e.toString() );
bServiceDownloading = false;
}
finally{
try {
if( is != null)
is.close();
if( fos != null)
fos.close();
if( con != null)
con.disconnect();
} catch (Exception e) {
Util.LOG_E(TAG, "CLOSE ERROR = " + e.toString() );
}
}
}
Et dans le manifeste de fichier que j'ai est la suivante:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Toutes les suggestions de ce que peut-être la cause?
Par la voie de l'Environnement.getExternalStorageDirectory() retourne /mnt/sdcard/ et fichier.mkdir() de retour faux.
source d'informationauteur Lazy Ninja
Vous devez vous connecter pour publier un commentaire.
Ce problème semble être causé par plusieurs facteurs.
Case n ° 1
D'abord ajouter cette autorisation dans votre fichier de manifeste et de vérifier si elle est en travail:
.....
Case#2:
Si vous êtes en cours d'exécution sur un émulateur, vérifiez les propriétés de voir si il a une carte SD.
Case#3:
Désactiver le transfert de fichiers de l'appareil vers l'ordinateur. Si l'option est Activée, l'application ne sera pas en mesure d'accéder à la carte SD.
Case n ° 4:
Si ne fonctionne toujours pas, essayez les solutions suivantes:
Pour moi qui suit travaillé:
Le problème est que getExternalStorageDirectory retours /mnt/sdcard alors que j'ai besoin sur le chemin de stockage externe qui est /mnt/sdcard-ext et il n'y a pas d'API android qui peut me faire le chemin d'accès absolu amovible carte sd.
Ma solution a été de coder en dur le répertoire comme suit:
Depuis l'application est conçue pour fonctionner uniquement sur un appareil, le ci-dessus a fait le travail.
Si vous rencontrez le même problème, utilisez un l'explorateur de fichiers de l'application trouver le nom du répertoire externe et coder en dur.
Utilisation
READ_EXTERNAL_STORAGE
autorisation de lire les données à partir de l'appareil.Avez-vous essayer sur émulateur? Vérifiez les propriétés si il a une carte SD. J'ai eu le même problème, et c'est parce que l'émulateur n'a pas une carte SD. Vérifier si la vôtre en a ou pas.
J'ai eu le même problème, et j'ai résolu par la désactivation du transfert de fichiers à partir d'un périphérique à l'ordinateur.
Parce que si u activer le transfert de fichiers de la carte sd n'est pas accessible pour le débogage de l'application.
et n'oubliez pas d'ajouter
Essayez d'utiliser mkdirs au lieu de mkdir. Si vous êtes à la création d'un chemin de répertoire et le parent qui n'existe pas, alors vous devriez utiliser mkdirs.
Je soupçonne que vous êtes en cours d'exécution Android 6.0 Guimauve API (23) ou plus tard. Si c'est le cas, vous devez mettre de l'exécution des autorisations avant de vous essayer à la lecture/écriture de stockage externe.
https://developer.android.com/training/permissions/requesting.html
J'ai eu le même problème. J'ai utilisé l'écriture et de la lecture de l'autorisation dans le manifeste correctement , mais ça n'a pas de travail! La solution était très bête: débranchez votre téléphone de l'ordinateur avant l'exécution de l'application. Il semble que lorsque votre téléphone est connecté en tant que "stockage de Masse" pour le PC, l'application ne peut pas accéder au stockage externe.