Ecrire dans un fichier texte

Fermé
Linquisiteur - 26 mars 2013 à 21:38
KX Messages postés 16739 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 19 mai 2024 - 26 mars 2013 à 22:40
Bonjour, comme toujours j'ai quelque souci avec les nouvelle matière..
J'essaie d'écrire dans un fichier texte mais eclipse me trouve une erreur dont je n'arrive pas a résoudre..

Sa prendra 1 seconde a un connaisseur mais moi je pourrais y passer la nuit pas que j'en serai embêter mais j'ai encore pas mal de boulot a finir donc si vous pourriez m'expliquer l'erreur ce serait gentil de votre part; Merci d'avance :)

import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Arrays;


/**
 * pré: Ecrit a la suite de l'autre les mot du tableau dans un fichier.
 * String tab[] est initialisé et est rempli de mot.
 * post: String tab[] est inchangé
 * Résultat: un fichier teste est agrémenter de mot
 */
public class methode5 {

	public static void ecrire (String tab[]) throws FileNotFoundException  {
		
		PrintWriter outputFile = new PrintWriter("nom.txt");
		int cpt=0;
	
		while (tab[cpt]!=null){
			outputFile.println(""+tab[cpt]);
			cpt++;
		}
		outputFile.close();
	}
	


	public static void main(String[] args) throws FileNotFoundException {
	
		String tab[]={"banane", "haricot", "asperge", "poire", "pomme"};
		System.out.println("Voici vos course:"+Arrays.toString(tab));
		ecrire(tab);
	}
}
A voir également:

2 réponses

KX Messages postés 16739 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 19 mai 2024 3 016
Modifié par KX le 26/03/2013 à 22:04
while (tab[cpt]!=null)
Ça n'a pas de sens d'écrire ceci puisque tu n'as jamais de valeur null dans ton tableau, du coup ton cpt++ continue et tu te retrouves au delà des limites de ton tableau d'où un joli : java.lang.ArrayIndexOutOfBoundsException: 5 (ici le 5 correspond à l'indice qui plante, puisqu'un tableau de 5 cases a des indices de 0 à 4)

Il faut plutôt écrire ta boucle avec une condition d'arrêt sur la taille du tableau :
while (cpt<tab.length)
Cependant pour ce genre de codes je te conseilles d'utiliser une boucle for :
for (int cpt=0; cpt<tab.length; cpt++)
Voire une boucle for each :
for (String str : tab)
Remarques :

""+tab[cpt]
le ""+ est totalement inutile, il alourdit le code, et le programme pour rien...

Et les commentaires en /** */ sont spécifiques à la documentation Java, elle doit respecter un certain format qu'il est intéressant de connaître, et qu'Eclipse t'aide à écrire :

/**
 * Description de la méthode.
 * @param tab rôle du paramètre
 * @throws FileNotFoundException cause(s) de l'exception
 */
public static void ecrire (String tab[]) throws FileNotFoundException
{
	PrintWriter outputFile = new PrintWriter("nom.txt");
	
	for (String str : tab)
		outputFile.println(str);
	
	outputFile.close();
}
0
Linquisiteur
26 mars 2013 à 22:19
merci encore KK tu as encore résolu mon problème ^^

Je n'ai pas compris pour la boucle each par contre.. Je ne l'ai jamais vu..
Elle sert a écrire dans le fichier?

Je vais commencer a tenter la lecture maintenant.. si tu as des conseil ;)
Sinon je vais chipoter dans mon coin ^^"
0
KX Messages postés 16739 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 19 mai 2024 3 016
26 mars 2013 à 22:40
"la boucle each par contre. [...] Elle sert a écrire dans le fichier?"
Non, pas du tout. La boucle for each permet de lire les éléments dans le tableau les uns après les autres. Ces trois codes font la même chose :

int cpt=0;
while (cpt<tab.length)
{
    outputFile.println(tab[cpt]);
    cpt++;
}

for (int cpt=0; cpt<tab.length; cpt++)
    outputFile.println(tab[cpt]);

for (String str : tab)
    outputFile.println(str);

L'avantage de la boucle for each c'est qu'elle est plus rapide puisqu'il n'y a pas d'initialisation, pas d'incrémentation, pas de test d'arrêt, et pas de recherche de la case (ce qui limite aussi les risques d'erreurs dans le code).
De plus cette boucle s'applique de la même manière sur les tableaux que sur les Collection. Les éléments sont lus les uns derrière les autres jusqu'à la fin. Elle remplace donc la plupart des utilisations des Iterator...
0