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

avec Java Discussion :

tout est logique mais


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 53
    Par défaut tout est logique mais
    bonjour a tous
    voila j'ai un pgm en java qui lit un fichier .txt et mettre ces lignes dans un tableau,le fichier contient 6 lignes alors la table doit contenire 6 lignes mais il m'affiche que la taille du fichier est 15 et le tableau de sortie est null,voici le code:
    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
     
    import java.io.*;
     
    public class  LireFichier{
     
    	  static File fichier=new File("users.txt");;
    	  static int i=0;	
     
         public static String []  lecture_fichier(String fichier) {
     
           int taille=fichier.length();
           System.out.println(taille);
           String[] tableau=new String[taille];
     
    		try{
    			InputStream ips=new FileInputStream(fichier); 
    			InputStreamReader ipsr=new InputStreamReader(ips);
    			BufferedReader br=new BufferedReader(ipsr);
    			String  ligne;
     
    			while ((ligne=br.readLine())!=null){
    		    	tableau[i]=ligne;
    		    	System.out.println(tableau[i]);
        	       	i++;	
        	    	}
    	    	br.close();
    	    	}		
    		catch (Exception e){
    			System.out.println(e.toString());
    		    }
    	  return tableau ;
     
    	}
     
    	public static void main (String[] args){
    	 String	rep[]=lecture_fichier("utilisateur.txt");
    	 	   	for(int j=0;j<rep.length;j++) { 
            	System.out.println(rep[i]);
                }
     
    	 	}		
    }
    je ne sais pas ou est le pb ,un peut d'aide merci d'avance

  2. #2
    Membre très actif
    Inscrit en
    Mars 2008
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 283
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           String[] tableau=new String[taille];
    A éviter !
    Tu veux renvoyer un tableau dont tu ne connais pas la taille (tu as la taille du fichier en octets mais pas son nombre de lignes), utilise donc une liste ArrayList<String> et sa méthode .toArray() pour le retour sous forme de tableau String[].

    Tes résultats seront nettement plus cohérents à mon avis.

    S'il y a encore une erreur, elle m'est inconnue.

  3. #3
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    Bonjour,

    d'accord avec Grimly

    File.length() est la taille mémoire du fichier

    concernant la lecture d'un fichier dans un tableau vous avez déjà eu une réponse

    lecture d'un fichier et le mettre dans un tableau

  4. #4
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    Citation Envoyé par midou84 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	public static void main (String[] args){
    	 String	rep[]=lecture_fichier("utilisateur.txt");
    	 	   	for(int j=0;j<rep.length;j++) { 
            	System.out.println(rep[i]); <---- Pas i mais j 
                }
                
    	 	}

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Désolé mais tout est loin d'être logique et surtout pas très propre...

    • Tu utilises des attributs statiques abusivement ! Pourquoi as-tu besoin d'attribut static ici ??? C'est une source d'erreur et de consommation mémoire abusive (les objets ne pourront pas être libéré), mais c'est surtout inutile dans ton cas ! Utilises des variables locales
    • D'ailleurs tu as un conflit de nom entre l'attribut static de type File et le paramètre String qui s'appellent tous les deux "fichier" : du coup tu récupères la longueur de la chaine et non pas la taille du fichier !
    • De toute manière la taille d'un fichier ne correspond pas à son nombre de ligne, mais à son nombre de caractères...
    • Si tu veux récupérer les lignes d'un fichier dans un tableau il est préférable d'utiliser une ArrayList que tu transformera ensuite en tableau...
    • Tu n'utilises pas de try/finally pour fermer ton fichier (lire : Comment libérer proprement les ressources ?)


    Bref ta méthode lecture_fichier() devrait plutôt ressembler à ceci :
    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
    	public static String[] lecture_fichier(String fichier) {
    		List<String> list = new ArrayList<String>();
    		try {
    			BufferedReader br = new BufferedReader(new FileReader(fichier));
    			try {
    				String ligne;
    				while ((ligne = br.readLine()) != null) {
    					list.add(ligne);
    				}
    			} finally {
    				br.close();
    			}
    		} catch (Exception e) {
    			System.out.println(e.toString());
    		}
    		return list.toArray(new String[list.size()]);
    	}
    (au passage la méthode devrait plutôt se nommer lectureFichier() voir readFile()...)


    a++

  6. #6
    Membre chevronné Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Par défaut
    Etrange aussi tes objets fichiers ....
    qui un coup designe le fichier "user.txt" et une autre fois la chaine "utilisateur.txt"

  7. #7
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 53
    Par défaut
    rien n'est logique dans cette class,etant donné débutant en java tous m'apparait logique merci pour vos réponses

  8. #8
    Inactif  
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 497
    Par défaut
    'lut,

    tu as quasiment toutes tes variables en static ?!!!
    pourquoi ? l'intêret ? la particularité de java c'est que tu es maîtres de tout c que tu écris, qui est censé être en connaissance de cause(!=javascript). Donc si tu prends la décision d'écrire tel ou tel chose de cette manière, tu dois être capable de répondre au pourquoi si l'on te questionne.

    pourquoi static ?

    si tu ne sais pas, fais sans.

    tu utilises les tableaux aussi, c'est bien, ok, mais cependant pour t'éguiller, il y a mieux pour le remplissage de tableau dynamque.


    essaie de chercher via google : Arraylist ou encore vector ou encore hashtable ... dans ton cas Arraylist ira très bien.


    @ toute.


    ps :
    etant donné débutant en java tous m'apparait logique
    et je dirais même plus, Logique !




Discussions similaires

  1. "please relocate" à la racine, mais dans un dossier tout est bon
    Par Concombre Masqué dans le forum Subversion
    Réponses: 0
    Dernier message: 28/11/2010, 12h36
  2. [MySQL] tout est ok en local mais pas en ligne
    Par visqueu dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/05/2010, 14h42
  3. Réponses: 1
    Dernier message: 24/05/2006, 20h47
  4. XHTML / CSS : c'est super mais pourquoi?
    Par G.D.O dans le forum Mise en page CSS
    Réponses: 12
    Dernier message: 07/03/2006, 14h08
  5. Réponses: 7
    Dernier message: 25/12/2005, 01h07

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