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

Entrée/Sortie Java Discussion :

Ecrire et manipulations sur les fichiers en Java


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2015
    Messages : 19
    Par défaut Ecrire et manipulations sur les fichiers en Java
    Bonjour chère communauté,

    Je suis bloqué. Sinon je ne serai pas ici x)
    On m'a donné les exercices suivants à réaliser
    Créez un programme qui demande à l'utilisateur d'entrer un nom de fichier et du texte quelconque
    et qui enregistre ce texte dans un fichier en utilisant le nom donné.
    J'ai réussi à faire ceci, et ça marche plutôt bien :

    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
    package exercice1;
     
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.*;
     
    public class Exercice1 {
     
    	/*Créez un programme qui demander à l'utilisateur d'entrer un nom de fichier et du texte quelconque 
    	et qui enregistre ce texte dans un fichier en utilisant le nom donné.*/
     
    	public static void main(String args []) throws IOException{
     
    		String nom;
    		String texte;
     
    		Scanner sc = new Scanner (System.in);
     
    		System.out.println("Ecrire le nom");
    		nom = sc.nextLine();
     
    		System.out.println("Saisir le texte");
    		texte = sc.nextLine();
     
    		File fichier = new File("D:\\"+nom+".txt");
    		PrintWriter pw = new PrintWriter(new FileWriter(fichier)) ;
    		pw.append(texte);
    		pw.println();
    		pw.close();
    	}
     
    }
    Maintenant, le deuxième exercice me demande quelque chose que je n'arrive pas du tout à faire, malgré toutes mes recherches et test >.<

    Améliorez Exercice1.java en ajoutant une boucle qui permet d'entrer plusieurs textes quelconques. Les textes saisis par l'utilisateur
    sont enregistrés directement dans le fichier. Lorsque l'utilisateur entre une ligne vide, le programme ferme le fichier et se termine.
    Ce que j'ai tenté de faire :

    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
    package exercice2;
     
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.*;
     
    public class Exercice2 {
     
    	/*Améliorez Exercice1.java en ajoutant une boucle qui permet d'entrer plusieurs textes quelconques. Les textes saisis par l'utilisateur
    	 * sont enregistrés directement dans le fichier. Lorsque l'utilisateur entre une ligne vide, le programme ferme le fichier et se termine.
    	 */
     
    		public static void main(String args []) throws IOException{
     
    FileWriter writer = null;
    String texte = "texte à insérer à la fin du fichier";
     
    try{
         writer = new FileWriter("fichier.txt", true);
         writer.write(texte,0,texte.length());}
     
    catch(IOException ex){
        ex.printStackTrace();}
     
    finally{
      if(writer != null){
         writer.close();
      }
    }
     
    }
     
    }
    J'ai fait ça il y a plusieurs semaines (étant en alternance, je n'ai pas continué le programme récemment) et j'étais même passé à autre chose, donc je ne me souviens plus vraiment de ce que j'avais écrit, et pourquoi je l'avais écrit x)

    J'aimerais vraiment savoir ce qui ne va pas, pourquoi ça ne fonctionne pas, et qu'est-ce qu'il me manque comme connaissances et fonctions pour réussir cet exercice ?
    Merci par avance de votre aide !

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tu devrais repartir plutôt de ton premier code déjà :

    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
    package exercice1;
     
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.*;
     
    public class Exercice1 {
     
    	/*Créez un programme qui demander à l'utilisateur d'entrer un nom de fichier et du texte quelconque 
    	et qui enregistre ce texte dans un fichier en utilisant le nom donné.*/
     
    	public static void main(String args []) throws IOException{
     
    		String nom;
    		String texte;
     
    		Scanner sc = new Scanner (System.in);
     
    		System.out.println("Ecrire le nom");
    		nom = sc.nextLine();
     
    		System.out.println("Saisir le texte");
    		texte = sc.nextLine();
     
    		File fichier = new File("D:\\"+nom+".txt");
    		PrintWriter pw = new PrintWriter(new FileWriter(fichier)) ;
    		pw.append(texte);
    		pw.println();
    		pw.close();
    	}
     
    }
    Ensuite, si tu lis le sujet de l'exercice 2, tu as la réponse quasiment en toutes lettres :

    1. "permet d'entrer plusieurs textes quelconques" : ceci va se traduire forcément par une boucle, dans laquelle il y aura donc la saisie d'un texte :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      System.out.println("Saisir le texte");
      		texte = sc.nextLine();
    2. Les textes saisis par l'utilisateur sont enregistrés directement dans le fichier. : donc il faut que le fichier soit ouvert avant la boucle, et que chaque fois qu'on saisit un texte, il soit écrit dans le fichier ouvert, ce que tu fais dans ton premier code par
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      pw.append(texte);
      		pw.println();
    3. Lorsque l'utilisateur entre une ligne vide, le programme ferme le fichier et se termine. : la condition pour que la boucle s'arrête est donc texte.isEmpty(). C'est également une condition pour ne pas écrire texte dans le fichier.
    4. Evidemment, on ne ferme le writer que lorsqu'on est sorti de la boucle
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2015
    Messages : 19
    Par défaut
    Salut Joel,

    J'ai donc modifié cela en suivant ce que tu m'as dit ; seulement, la partie qui demande "Lorsque l'utilisateur entre une ligne vide, le programme ferme le fichier et se termine" ne semble pas fonctionner avec "texte.isEmpty()". Alors, soit il est mal placé, soit je l'ai mal utilisé. Voire les deux en même temps.

    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
    public static void main(String args []) throws IOException{
     
    			String nom;
    			String texte = "";
     
    			Scanner sc = new Scanner (System.in);
    			System.out.println("Ecrire le nom");
    			nom = sc.nextLine();
     
    			System.out.println("Saisir le texte");
    			texte = sc.nextLine();
     
    			File fichier = new File("D:\\"+nom+".txt");
    			PrintWriter pw = new PrintWriter(new FileWriter(fichier)) ;
     
    			while (texte != "" ){
     
    			pw.append(texte);
    			pw.println();
    			texte.isEmpty();
     
    			}
     
    				pw.close();
    			}
     
    		}

  4. #4
    Invité
    Invité(e)
    Par défaut
    Te retourne un boolean si ta chaine de caractère est vide.

    Il faut donc t'en servir dans le test de ta boucle while, puisqu’actuellement tu n'en fais rien.

    Ne signifie pas 'texte n'est pas vide' mais compare les références de ' texte ' et de ' "" '

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    On ne doit pas tester l'égalité (ou la non égalité) de chaîne avec == ou !=, mais avec equals() (on peut le faire dans certains cas, quand on comprend exactement ce qu'on fait et comment les String fonctionnent en Java). Mais de toute manière pourquoi chercher à tester cette différence comme ça, alors qu'on a la méthode .isEmpty() qui est censée le faire ?

    Ensuite texte.isEmpty(); ne fait aucun test : la valeur de retour n'est pas exploitée.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2015
    Messages : 19
    Par défaut
    Vraiment, j'ai essayé... mais je ne comprends pas vos explications. J'en peux plus, j'ai appris sur le tas, je ne connais pas la théorie, seulement la pratique, alors je n'y arrive pas. J'avance à tâton, et ça ne m'aide pas.
    Il me faudrait des explications plus claires...

    J'ai toujours utilisé "while (variable =! 0) ou autres valeurs interdites, jamais utilisé equals().
    Quant à texte.isEmpty, je ne comprends pas non plus comment je dois l'utiliser. Pourtant j'ai déjà utilisé des booleans, mais là, j'suis dans le flou malgré vos explications sur cette ligne de commande.

    Je ne demande qu'à être guidé et aidé, mais s'il-vous-plait, s'il est possible d'être plus précis dans vos explications, parce que ça va bientôt faire deux semaines que je stagne sur ce foutu exercice, j'ai l'impression de devenir dingue et de régresser...

    Pardon si je suis un chouia agressif, j'ai passé mon week-end là-dessus, à essayer pleins de choses, à chercher sur Internet...
    Pourtant, l'exercice n'est pas si dur quoi ! ;_;

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Un algorithme possible est le suivant :

    Code pseudocode : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ouvrir fichier
    lire texte au clavier
     
    tant que texte n'est pas vide
     
        ecrire texte dans fichier
     
        lire texte au clavier
     
    fin tant que
    fermer fichier

    Maintenant, c'est difficile de dire comme encoder ça en Java sans te donner la solution finale ! Mais normalement, tout ce qu'il y a dans cet algorithme, tu l'as déjà fait dans ton premier exercice, sauf le test "texte n'est pas vide", qui peut s'écrire en Java, de plusieurs manières, dont par exemple :

    1. ! "".equals(texte)
    2. ! texte.isEmpty() (parce que texte.isEmpty() retourne un booléen, qui est vrai quand la chaine est vide, et faux sinon)


    NB : "lire texte au clavier" ça inclut évidemment l'affichage de l'invite
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Questions sur les fichiers Ressource .RC .RES
    Par dexterz dans le forum Langage
    Réponses: 10
    Dernier message: 01/08/2005, 10h15
  2. Réponses: 3
    Dernier message: 28/10/2004, 08h39
  3. Commande en shell -- Sur les fichiers
    Par OrangeBud dans le forum Linux
    Réponses: 8
    Dernier message: 18/05/2004, 13h13
  4. [C#] Authentification sur les fichiers Pdf
    Par ensisoft dans le forum ASP.NET
    Réponses: 14
    Dernier message: 04/05/2004, 12h10
  5. Réponses: 6
    Dernier message: 28/04/2004, 10h41

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