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 :

Ecrire dans un fichier


Sujet :

Android

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 35
    Points : 25
    Points
    25
    Par défaut Ecrire dans un fichier
    bonjour
    j'essaye d'écrire dans un fichier, la compi/exec fonctionne correctement

    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
    String adressedufichier = System.getProperty("user.dir") + "/"+ "lesClasses.txt";
                try
                {
                    new File(adressedufichier).delete();
                    FileWriter fw = new FileWriter(adressedufichier, true);
                    BufferedWriter output = new BufferedWriter(fw);
                    //output.write(graf.figures.écrire());
                    output.flush();
                    output.close();
                    System.out.println("fichier créé");
                }
                catch(IOException ioe){
                    System.out.print("Erreur : ");
                    ioe.printStackTrace();
                    }
    mais je ne ne sais ce que signifie 'user.dir', j'ai beau chercher mon fichier je ne le trouve nulle part (même avec un moteur à partir de la racine /)
    c'est quoi le problème?

    j'utilise Eclipse Juno, Android ICS 4.0.3

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    user.dir c'est la home directory de l'utilisateur.

    Si tu ignore ce qu'elle vaut, le plus simple c'est de l'afficher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("user dir = "+System.getProperty("user.dir"));

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    bon apparemment, on ne peut pas stocker sur la mémoire interne de la tablette autrement qu'en root. Sinon il faut en fait stocker sur carte SD, rajouter
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> dans le manifeste et hop ça roule

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Je crois qu'il y a misunderstanding...

    "External Storage" n'est pas "Carte SD"

    Android fait la distinction entre:
    "Internal Storage" (données sur la partition des applications, pas toujours très grosse).
    "External Storage" (données sur une partition spéciale, en général prenant toute la place restante de la SD interne).
    Le nom vient du fait qu'initialement, l'external storage était accessible en USB.

    Ecrire sur la mémoire "externe" demande effectivement une permission spéciale.

    En plus il faut savoir si ces données sont "privées" à l'application (et supprimées à la désinstallation de celle-ci). Dans ce cas on utilisera Context.getExternalFilesDir()

    Ou si les données sont publiques (accessibles à tous), et on utilisera alors: Environment.getExternalStoragePublicDirectory()
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    ok, j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String adressedufichier = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)+"/lesClasses.txt";
    try
    {
        FileWriter fw = new FileWriter(adressedufichier, true);
    }
    catch(IOException ioe){System.out.print("Erreur : ");ioe.printStackTrace();}
    et c'est bon mon fichier est créé dans /sdcard/DCIM
    mais il faut là aussi une autorisation 'spéciale', au même titre que pour enregistrer sur une carte sd, à savoir écrire
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> dans le manifeste
    je vois qu'il n'existe pas de Environment.DIRECTORY_MY_DOCUMENTS, il faut donc passer par String adressedufichier = "/sdcard/My Documents/lesClasses.txt";

    Bon visiblement, j'essayais d'enregistrer dans des répertoires pour lesquels je n'avais pas de droit (comme /data)

  6. #6
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    "My Documents" c'est un truc de windows ça....


    DCIM = Digital Camera .... à moins de prendre des photos, ce n'est pas le bon endroit.

    On peut aussi passer "null" à la place d'un directory spécifique, et on aura accès à la racine de l'external storage public (y créer un répertoire pour l'application)...

    D'autre part, éviter l'utilisation de String pour représenter un fichier... Java dispose des objets URI et File pour cela (File si restreint à la machine locale).

    Et pour finir, éviter le system.out.println et surtout les printStackTrace....

    Exemple de code pour un répertoire "My Documents" (à noter qu'on n'utilise pas de construction avec '/' au cas ou le système de fichier change pour un autre séparateur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public static File  getDocumentsDirectory()
    {
        return new File(Environment.getExternalStoragePublicDirectory(null),"Documents");
    }
    Exemple de code pour l'utilisation... Je trouve étonnant que l'exception IO soit capturée ici, le code appelant n'a pas besoin de savoir que l'opération ne s'est pas déroulée correctement ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    File docsDir = getDocumentsDirectory();
    docsDir.mkdir();
    File docFile = new File(docsDir,"lesClasses.txt");
    FileWriter fw = null;
    try {
        fw = new FileWriter(docFile,true);
        ....
    } catch (IOException e) {
        Log.e("NomDeMaClasse","Erreur d'écriture du fichier "+docFile,e);
    } finally {
        if (fw != null) try { fw.close(); } catch (Exception x) { Log.e("NomDeMaClass","Failed to gracefully close file "+docFile,x); }
    }
    sans la gestion du IOException (ce qui me semble plus correcte):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    File docsDir = getDocumentsDirectory();
    docsDir.mkdir();
    File docFile = new File(docsDir,"lesClasses.txt");
    FileWriter fw = new FileWriter(docFile,true);
    try {
        ....
    } finally {
        fw.close();
    }
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. Ecrire \" dans un fichier
    Par photorelief dans le forum Langage
    Réponses: 2
    Dernier message: 14/09/2005, 15h56
  2. [JAR] Lire et Ecrire dans un fichier contenu dans un jar
    Par lipao17 dans le forum Général Java
    Réponses: 5
    Dernier message: 02/05/2005, 12h01
  3. Ecrire dans un fichier
    Par gibet_b dans le forum Linux
    Réponses: 5
    Dernier message: 25/04/2005, 20h11
  4. Ecrire dans un fichier grace à un trigger ?
    Par zigoo dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 29/10/2004, 20h03
  5. Ecrire dans un fichier sans supprimer le reste
    Par koan_sabian dans le forum Linux
    Réponses: 4
    Dernier message: 20/02/2003, 15h44

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