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 :

Création et édition d'un fichier texte


Sujet :

Android

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Par défaut Création et édition d'un fichier texte
    Bonjour à tous,

    J'ai une application bien spécifique à faire mais je vais simplifier le problème pour que vous m'aidiez à trouver la solution.

    Je souhaite généré un fichier texte contenant :
    "1
    2
    3
    ... (jusqu'à) 20"

    Voici le code que j'ai trouvé et que je propose d'utiliser :
    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
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
     
     
    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.util.Log;
     
    public class Main extends Activity{
     
     
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
     
            // Recupere le dossier de stockage de l'application
            File ls = this.getFilesDir();
            Log.i("","Local Storage : "+ls.getAbsolutePath());
     
            // Crée un dossier
            File cd = this.getDir("demo", Context.MODE_WORLD_READABLE|Context.MODE_WORLD_WRITEABLE);
     
    		File fl = new File(cd.getAbsolutePath()+"/demo2.txt");
    		Log.i("",fl.getAbsolutePath());
     
    		// Ecrit un fichier avec chemin
    		try {
    			for (int i=1;i<=20;i++){
    			FileOutputStream fos = new FileOutputStream(fl);
    			DataOutputStream dos = new DataOutputStream(fos);
    			String text;
    			text=""+i;
    			dos.write(text.getBytes());
    			fos.close();
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
        }
     
    }
    le problème c'est que le fichier texte généré est le suivant :
    "20"
    C'est à dire, que les données sont écrasé à chaque itération de ma boucle For.

    Ma question : comment faire pour écrire le texte l'un à la suite de l'autre comme prévu ?

    je continue à regarder si je trouve je poste la solution bien sûr ^^.

  2. #2
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10 640
    Par défaut
    Bonjour, déjà il faut que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FileOutputStream fos = new FileOutputStream(fl);
    DataOutputStream dos = new DataOutputStream(fos);
    String text;
    fos.close();
    Ne soit pas déclarer à l'intérieur du for.
    Ça peut poser problème.

    Peut être qu'il faut écrire \n.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    FileOutputStream fos = new FileOutputStream(fl);
    DataOutputStream dos = new DataOutputStream(fos);
    String text;
    for (int i=1;i<=20;i++){
         text=""+i;
         dos.write(text.getBytes());   
    }
    fos.close();
    Ça devrait plus le faire déjà.
    Ou peut être : dos.write(text.getBytes()+"\n");
    Mais je ne suis pas sûre que ce soit nécessaire.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Par défaut
    Merci de ta réponse rapide (comme d'habitude).

    Ou peut être : dos.write(text.getBytes()+"\n");
    ce code génère un message d'erreur.

    du coup à la place j'assayé ; text=""+i+"\n" mais ça ne donne pas le résultat voulu.

  4. #4
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10 640
    Par défaut
    Non mais rien que ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    FileOutputStream fos = new FileOutputStream(fl);
    DataOutputStream dos = new DataOutputStream(fos);
    String text;
    for (int i=1;i<=20;i++){
         text=""+i;
         dos.write(text.getBytes());   
    }
    fos.close();
    Ça ne t'écrit pas plusieurs lignes ?
    Je suis aller voir des exemples de boucle for avec des DataOutputStream et il ni a pas de \n.

    Ou alors essai : dos.writeBytes(text+"\n");
    Ou bien dos.writeBytes(new String(text+"\n"));

    Je ne sais pas dans les forums ils conseillent d'utiliser PrintWriter.

  5. #5
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Si c'est pour écrire du texte pourquoi faire text.getBytes() ?
    Il vaut mieux utiliser un Writer qui gère correctement les flux de caractères.

    Ensuite il vaut mieux fermer le flux surlequel on écrit car il peut être bufferisé. Donc dos.close() plutôt que fos.close().
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Par défaut
    Merci thierrybenji, mais j'ai proposé une boucle for ici car dans mon application finale, je serai amené à faire des modifications régulière sur le fichier texte. C'est pour cette raison que je veux écrire les valeur du String text les uns à la suite des autres.

    Nemek, j'ai essayer writer (je ne suis pas un spécialiste de java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    			FileOutputStream fos = new FileOutputStream(fl);
    			DataOutputStream dos = new DataOutputStream(fos);
    			for (int i=1;i<=20;i++){
     
    			String text;
    			text=""+i+"\n";
    			//dos.write(text.getBytes());
    			//fos.close();
    			Writer tes=null;
    			tes.append(text, 0, 5);
    			dos.close();

    le fichier .txt généré donne : rien ... lol. Le problème doit venir de ma définition de mon Writer je suppose

  7. #7
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10 640
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    FileOutputStream fos = new FileOutputStream(fl);
    DataOutputStream dos = new DataOutputStream(fos);
    String text;
    for (int i=1;i<=20;i++){
         text=""+i;
         dos.writeBytes(text+"\n");   
    }
    fos.close();
    Ça donne quoi ?

    ============
    Edit, ya un truc qui passe sinon, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    String total="";
    for(....){
      total+="ce que tu veux \n";   
    }
    dos.write(total);

  8. #8
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Citation Envoyé par radjant1 Voir le message
    Merci thierrybenji, mais j'ai proposé une boucle for ici car dans mon application finale, je serai amené à faire des modifications régulière sur le fichier texte. C'est pour cette raison que je veux écrire les valeur du String text les uns à la suite des autres.

    Nemek, j'ai essayer writer (je ne suis pas un spécialiste de java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    			FileOutputStream fos = new FileOutputStream(fl);
    			DataOutputStream dos = new DataOutputStream(fos);
    			for (int i=1;i<=20;i++){
     
    			String text;
    			text=""+i+"\n";
    			//dos.write(text.getBytes());
    			//fos.close();
    			Writer tes=null;
    			tes.append(text, 0, 5);
    			dos.close();

    le fichier .txt généré donne : rien ... lol. Le problème doit venir de ma définition de mon Writer je suppose
    Ton writer est null ...

    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
     
    FileOutpuStream fos = null;
    OutputStreamWriter osw = null;
    PrintWriter pw = null;
    try {
      fos = new FileOutputStream(file);
      osw = new OuputStreamWriter(fos, "UTF-8");
      pw = new PrintWriter(osw);
      for (int i=0; i < 20; i ++) {
        pw.println(i);
      }
      pw.flush();
    }
    catch (IOException ioe) {
      ioe.printStackTrace();
    }
    finally {
      try {
        if (pw != null) pw.close();
        else if (osw != null) osw.close();
        else if (fos != null) fos.close();
      }
      catch (Throwable t) {
        t.printStackTrace();
      }
    }
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Par défaut
    Ton writer est null ...
    mais euh ! lol ! J'avoue je suis null (moi=null !

    peux-tu m'expliquer un peu ton code car là je suis un peu perdu ?

    edit du 8 Juin à 10h10: mais sinon ton code marche ! je mets pas en résolu tout de suite si quelqu'un veut bien expliciter le code proposé par nemek pour expliquer au novice comme moi.

  10. #10
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    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
     
    // Déclaration des flux pour traiter correctement leur fermeture
    FileOutpuStream fos = null;
    OutputStreamWriter osw = null;
    PrintWriter pw = null;
    try {
      // Ouverture du fichier
      fos = new FileOutputStream(file);
      // Encapsulation du flux binaire dans un flux texte qui écrit en UTF-8
      osw = new OuputStreamWriter(fos, "UTF-8");
      // Bufferisation / simplification du flux texte
      pw = new PrintWriter(osw);
      // J'écris 20 lignes qui contiennent les nombres de 0 à 19
      for (int i=0; i < 20; i ++) {
        pw.println(i);
      }
      // Je vide le buffer (au cas où)
      pw.flush();
    }
    // Je gère l'erreur, il ya mieux à faire :x
    catch (IOException ioe) {
      ioe.printStackTrace();
    }
    // Je ferme proprement mes flux par ordre inverse d'encapsulation
    finally {
      try {
        // Je vérifie si mon flux de plus haut niveau est initialisé et le ferme si jamais
        if (pw != null) pw.close();
        // Sinon je vérifie celui de moins haut niveau
        else if (osw != null) osw.close();
        // Finalement je vérifie le plus bas niveau
        else if (fos != null) fos.close();
      }
      // Le close peut générer une erreur dans certains cas
      catch (Throwable t) {
        t.printStackTrace();
      }
    }
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Par défaut
    Ok super affaire résolu ^^

  12. #12
    Membre averti
    Inscrit en
    Août 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 34
    Par défaut
    J'actualise un vieux sujet mais il correspond bien à ce que je cherchais.

    Aprés avoir créé un fichier et l'avoir modifié, je me pose la question de savoir comment choisir la destination de ce fichier si c'est possible?

  13. #13
    Expert confirmé

    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
    Par défaut
    je me pose la question de savoir comment choisir la destination de ce fichier si c'est possible?
    C'est à dire, en fonction de quoi ?

    Veux tu qu'il soit privé , publique , ... ?

  14. #14
    Membre averti
    Inscrit en
    Août 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 34
    Par défaut
    C'est a dire choisir (dans le code) la destination du fichier cree.

    Et publique

    merci

  15. #15
    Expert confirmé

    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
    Par défaut
    Dans ce cas sur la sdcard alors
    http://developer.android.com/guide/t...#filesExternal

    ici :
    http://developer.android.com/referen...ageDirectory()

    Il y a des discussions sur le forum à ce sujet, par une recherche tu devrais trouver chaussure à ton pied

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 19/12/2011, 18h32
  2. Création requete insert dans un fichier texte
    Par harry le ravi dans le forum Débuter
    Réponses: 4
    Dernier message: 03/07/2009, 13h08
  3. [VBA] Création d'un format d'import de fichier texte
    Par Julien Dufour dans le forum Access
    Réponses: 6
    Dernier message: 12/05/2006, 18h37
  4. Création d'un fichier texte
    Par licorne dans le forum Langage
    Réponses: 9
    Dernier message: 25/10/2005, 18h05
  5. [AC97] création d'un fichier texte
    Par pokemoon94 dans le forum VBA Access
    Réponses: 5
    Dernier message: 05/10/2004, 15h45

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