IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Erreur "java.io.FileNotFoundException / Permission Denied"


Sujet :

Android

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Erreur "java.io.FileNotFoundException / Permission Denied"
    Bonjour,

    Je suis débutant en programmation Java et j'ai comme projet de créer une petite application qui permettra de choisir différentes configuration wifi à partir du fichier wpa_supplicant.conf qui se trouve dans /data/misc/wifi sur ma tablette.

    Au passage notez que ma tablette est "rooted".

    Dans un premier temps je souhaite juste copier un fichier existant (une copie modifiée par moi même de wpa_supplicant.conf) à la place de wpa_supplicant.conf, donc l'écraser.

    Problème, en regardant les logs j'ai le message d'erreur indiqué dans le titre de mon message.

    J'ai regardé les permissions du fichier, elles sont "Read/Write" pour Owner et Group, et rien pour Others.

    J'ai donc fait un essai en ajoutant les permissions à Read/Write pour Others (avec le programme RootExplorer) et la ça marche je peux lire et copier les fichiers en question avec mon programme.

    Evidemment j'aimerai avoir la solution sans avoir à changer les permissions avec RootExplorer.

    J'ai essayé en ajoutant:

    Process p;
    ...
    p = Runtime.getRuntime().exec("su");

    Je vois bien quand j’exécute mon programme une demande pour lui donner les droits superutilisateurs - que j'accepte - mais il y a toujours un permission denied dans les logs et impossible de lire le fichier wpa_supplicant.conf

    Voici le bout de code utiliser pour la copie du fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    public static boolean copyFile(String source, String dest){
        	Process p; 
     
     
        	try{
        		p = Runtime.getRuntime().exec("su");
        		File root = android.os.Environment.getRootDirectory();
        		// Declaration et ouverture des flux
        		java.io.FileInputStream sourceFile = new java.io.FileInputStream(source);
     
     
        		try{
        			p = Runtime.getRuntime().exec("su");
        			java.io.FileOutputStream destinationFile = null;
     
        			try{
     
     
        				p = Runtime.getRuntime().exec("su");
        				destinationFile = new FileOutputStream(dest);
     
        				// Lecture par segment de 0.5Mo 
        				byte buffer[] = new byte[512 * 1024];
        				p = Runtime.getRuntime().exec("su");
        				int nbLecture;
     
        				while ((nbLecture = sourceFile.read(buffer)) != -1){
        					destinationFile.write(buffer, 0, nbLecture);
        				}
        			} finally {
        				destinationFile.close();
        			}
        		} finally {
        			sourceFile.close();
        		}
        	} catch (IOException e){
        		e.printStackTrace();
        		return false; // Erreur
        	}
     
        	return true; // Résultat OK  
        }
    Enfin, j'ai bien ça dans AndroidManifest.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    Merci pour l'aide car je cale

  2. #2
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    /data/misc/wifi sur ma tablette
    Euh la permission
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    n'est pas la bonne puisque tu essayes d'écraser un fichier interne dans le dossier data de ton téléphone.

    Après je suis désolé je ne connais pas cette permission qui est nécessaire( s'il y en a une).

    Voici ou tu pourra trouver les permissions :
    http://developer.android.com/referen...ermission.html

    Peut être WRITE_SECURE_SETTINGS ou WRITE_SETTINGS ?
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Salut,
    D'abord merci d'avoir répondu, j'ai cru que le forum était en lecture seule.

    Donc après avoir investigué voici la réponse (merci google & cie)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    Process suProcess;
    suProcess = Runtime.getRuntime().exec("su");   
     
    DataOutputStream os = new DataOutputStream(suProcess.getOutputStream());
     
    os.writeBytes("chown 1010.1000 /data/misc/wifi/test.txt"+ "\n");
    os.flush();
    os.writeBytes("exit\n");
    os.flush();
    A+

  4. #4
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    D'abord merci d'avoir répondu, j'ai cru que le forum était en lecture seule.
    Il faut être patient dans la vie, les gens qui prennent du temps à te répondre le prennent sur leurs temps libre.

    Après sur la solution que tu as trouvé sur le net, méfie toi celle-ci impose que ton téléphone soit rooté, si cette application est un but personnel tu n'auras pas de souci , si tu décides de la déployer alors il faudra revoir son fonctionnement !

    /data/misc/wifi/
    est un dossier système normalement tu n' as pas d'accès d'écriture.

    Je t'ai proposé des permissions à tester car je ne connais pas leur zone d'influence.

    Le mieux à mon avis serait de revoir ou tu sauvegardes ce fichier qui n'a peut être rien à faire dans ce dossier.
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Feanorin Voir le message
    Il faut être patient dans la vie, les gens qui prennent du temps à te répondre le prennent sur leurs temps libre.

    Après sur la solution que tu as trouvé sur le net, méfie toi celle-ci impose que ton téléphone soit rooté, si cette application est un but personnel tu n'auras pas de souci , si tu décides de la déployer alors il faudra revoir son fonctionnement !

    est un dossier système normalement tu n' as pas d'accès d'écriture.

    Je t'ai proposé des permissions à tester car je ne connais pas leur zone d'influence.

    Le mieux à mon avis serait de revoir ou tu sauvegardes ce fichier qui n'a peut être rien à faire dans ce dossier.

    Comme tu as pu le lire dans le message initial ma tablette est rootée, c'est donc en connaissance de cause que j'ai choisi cette solution.
    Le mieux je l'ai dans ma solution. Pour finir wpa_supplicant.conf est dans /data/misc/wifi , c'est pas moi qui choisi c'est le concepteur du système.

    Merci encore une fois aux forums chinois est anglo-saxons, lol

Discussions similaires

  1. Réponses: 8
    Dernier message: 05/01/2012, 10h41
  2. [débutant] erreur "indice de liste hors limites(1)"
    Par lidouka dans le forum Langage
    Réponses: 2
    Dernier message: 13/12/2005, 14h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo