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 externe


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 154
    Par défaut Ecrire dans un fichier externe
    Bonjour a tous,

    voila je voudrait ecrire quelque choses dans un fichier externe que je voudrait stocker dans le dossier Documents de ma tablette, seulement voila j'arrive bien a le faire en interne mais en externe rien ne se crée...

    je ne suis pas une béte e programaton mais j'ai suivie un tuto avec le quelle j'ai constitué le code suivent:

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.design.widget.FloatingActionButton;
    import android.support.design.widget.Snackbar;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.View;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
     
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Environment;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
     
    public class InterOK extends AppCompatActivity {
     
     
        private String PRENOM = "prenom.txt";
        private String userName = "titoutou";
        private File mFile = null;
        private File myDir = null;
     
        private Button mWrite = null;
        private Button mRead = null;
     
     
     
     
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_inter_ok);
     
     
            // On crée un fichier qui correspond à l'emplacement extérieur
            mFile = new File(Environment.getExternalStorageDirectory().getPath() + "/Documents/" + PRENOM);
     
     
     
            mWrite = (Button) findViewById(R.id.write);
            mWrite.setOnClickListener(new View.OnClickListener() {
     
                public void onClick(View pView) {
                    try {
                        // Flux interne
                        FileOutputStream output = openFileOutput(PRENOM, MODE_PRIVATE);
     
                        // On écrit dans le flux interne
                        output.write(userName.getBytes());
     
                        if(output != null)
                            output.close();
     
                        // Si le fichier est lisible et qu'on peut écrire dedans
                        if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
                                && !Environment.MEDIA_MOUNTED_READ_ONLY.equals(Environment.getExternalStorageState())) {
                            // On crée un nouveau fichier. Si le fichier existe déjà, il ne sera pas créé
                            mFile.createNewFile();
                            output = new FileOutputStream(mFile);
                            output.write(userName.getBytes());
                            if(output != null)
                                output.close();
                        }
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });
     
     
            mRead = (Button) findViewById(R.id.read);
            mRead.setOnClickListener(new View.OnClickListener() {
     
                public void onClick(View pView) {
                    try {
                        FileInputStream input = openFileInput(PRENOM);
                        int value;
                        // On utilise un StringBuffer pour construire la chaîne au fur et à mesure
                        StringBuffer lu = new StringBuffer();
                        // On lit les caractères les uns après les autres
                        while((value = input.read()) != -1) {
                            // On écrit dans le fichier le caractère lu
                            lu.append((char)value);
                        }
                        Toast.makeText(InterOK.this, "Interne : " + lu.toString(), Toast.LENGTH_SHORT).show();
                        if(input != null)
                            input.close();
     
                        if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
                            lu = new StringBuffer();
                            input = new FileInputStream(mFile);
                            while((value = input.read()) != -1)
                                lu.append((char)value);
     
                            Toast.makeText(InterOK.this, "Externe : " + lu.toString(), Toast.LENGTH_SHORT).show();
                            if(input != null)
                                input.close();
                        }
     
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
     
     
    }
    est ce que vous avez une idée de mon problème?

    ps: j'ai déjà mis ces ligne dans mon manifest

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
            <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    Merci d'avance

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 154
    Par défaut
    alors j'ai testé la connextion au storage externe avec ce script:

    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
     boolean mExternalStorageAvailable = false;
                    boolean mExternalStorageWriteable = false;
                    String state = Environment.getExternalStorageState();
     
                    if (Environment.MEDIA_MOUNTED.equals(state)) {
                        Toast.makeText(InterOK.this, "tous ok : ", Toast.LENGTH_SHORT).show();
                        // We can read and write the media
                        mExternalStorageAvailable = mExternalStorageWriteable = true;
                    } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
                        Toast.makeText(InterOK.this, "lecture seul : ", Toast.LENGTH_SHORT).show();
                        // We can only read the media
                        mExternalStorageAvailable = true;
                        mExternalStorageWriteable = false;
                    } else {
                        Toast.makeText(InterOK.this, "rien : ", Toast.LENGTH_SHORT).show();
                        // Something else is wrong. It may be one of many other states, but all we need
                        //  to know is we can neither read nor write
                        mExternalStorageAvailable = mExternalStorageWriteable = false;
                    }
    je l'ai glisser sur mon bouton write et la réponse est tout ok...

    donc sois je suis bête sois le problème viendrait de la ligne de création du fichier a savoir cette partie la:

    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
            mFile = new File(Environment.getExternalStorageDirectory().getPath()+File.separator+"Documents"+ PRENOM);
     
     
     
            mWrite = (Button) findViewById(R.id.write);
            mWrite.setOnClickListener(new View.OnClickListener() {
     
                public void onClick(View pView) {
     
                   // if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()))
                     //   Toast.makeText(InterOK.this, "ok : ", Toast.LENGTH_SHORT).show();
                    //else
                      //  Toast.makeText(InterOK.this, "pas ok : ", Toast.LENGTH_SHORT).show();
     
     
     
                    try {
                        // Flux interne
                        FileOutputStream output = openFileOutput(PRENOM, MODE_PRIVATE);
     
                        // On écrit dans le flux interne
                        output.write(userName.getBytes());
     
                        if(output != null)
                            output.close();
     
     
     
                        // Si le fichier est lisible et qu'on peut écrire dedans
                        if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
                                && !Environment.MEDIA_MOUNTED_READ_ONLY.equals(Environment.getExternalStorageState())) {
                            // On crée un nouveau fichier. Si le fichier existe déjà, il ne sera pas créé
                            mFile.createNewFile();
                            output = new FileOutputStream(mFile);
                            output.write(userName.getBytes());
                            if(output != null)
                                output.close();
                        }

  3. #3
    Expert confirmé

    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
    Billets dans le blog
    3
    Par défaut
    Salut !

    Il y a plusieurs problèmes mineurs...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mFile = new File(Environment.getExternalStorageDirectory().getPath()+File.separator+"Documents"+ PRENOM);
    En général on préfère le constructeur suivant (ce qui évite de se palucher tout un tas de transformations inutiles):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mFile = new File(Environment.getExternalStorageDirectory(), "Documents"+ PRENOM);
    Toutefois, getExternalStorageDirectory() on ne devrait *jamais* écrire dedans ! Ce peut-être un répertoire racine, contenant plusieurs sous répertoires.
    Il vaut mieux utiliser le getExternalFilesDir() du context:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mFile = new File(context.getExternalFilesDir(null),"Documents"+PRENOM);
    Attention "PRENOM" doit contenir des données acceptables par le système de fichier !
    (vu que c'est tout en majuscule, j'imagine que c'est une constante quelque part, auquel cas, autant faire une seconde constante: FILE_NAME="Documents"+PRENOM ).

    Ensuite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    mFile.createNewFile();
    output = new FileOutputStream(mFile);
    output.write(userName.getBytes());
    if(output != null)
        output.close();
    Encore une fois, createNewFile() ne sert à rien... son seul but est de tester de manière atomique l'existence du fichier, et de le "réserver" si il n'existe pas encore (le boolean retourné permet de savoir si le fichier a bien été reservé).
    Si c'est juste pour écrire dans un fichier, le FileOutputStream s'en charge.
    Quant au dernier "if (output != null)" au vu des lignes précedentes, le test ne sert à rien (output est *toujours* non null à cet endroit là).
    Je pense que celui qui a écrit le tuto a voulu faire comme les grands et gérer les exceptions, hors pour ce faire il faut passer par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    FileOutputStream output = null;
    try {
       output = new FileOutputStream(mFile);
       output.write(userName.getBytes());
    } finally {
       if (output != null) output.close();
    }
    Ou encore mieux, un try-with:


    Ensuite, je n'ai pas d'idée magique concernant l'écriture du fichier... si il n'y a pas d'exception c'est que ça s'est bien passé, et si il y a une exception, l'application va "force-close" (puisqu'on est dans un onClick et que celles-ci n'ont pas l'air d'être gérées). Un petit "log" (Log.d("FILE-WRITE",mFile); par exemple) pour savoir ou le fichier est écrit (et vérifier à la main ensuite) ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 154
    Par défaut
    Merci beaucoup pour cette réponse claire détaillé et précise!!

    je teste le toute aujourd’hui et je te retient au courent!!
    Merci encore!!

  5. #5
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 154
    Par défaut
    bon alors j'ai testé toutes tes modification et toujours rien... c'est a ce taper la tête contre les murs...

    c'est si compliquer que cela d’écrire des données dans un fichier avec un simple clique??

    sa me parait pourtant plus que basique comme manipulation non??

  6. #6
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2014
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 154
    Par défaut
    bon j'avance par petit étape, mon problème vient vraiment de cette ligne ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     mFile = new File(this.getExternalFilesDir(null),"Documents"+PRENOM);
    en gros si je fait avec cette ligne j'ai bien un fichier qui ce crée mais dans le dossier /sdcard/android/com.android.monapp/files/ et c'est la que je me dit que le problème vient de ma chaîne qui défini le nom de mon fichier par ce que ce con me crée un fichier qui s'appelle Documentsprenom.txt...

    donc il ne le prends pas comme un chemin mais comme un nom ce dadet..

    quelqu'un aurait une idée de comment définir un chemin et pas le nom...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CDLC] Ecrire dans un fichier "externe" à l'appli.
    Par psykrodelik dans le forum Java ME
    Réponses: 1
    Dernier message: 13/06/2007, 11h48
  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