parcourir un fichier texte

parcourir un fichier texte - Java - Programmation

Marsh Posté le 25-06-2004 à 08:23:51    

bonjour,
je voudrais parcourir un fichier texte contenant des enregistrements d'une base de données
une ligne représente un enregistrement, et dans une ligne chaques champ est separé par un point virgule
apprement le code que j'ai plante, il ne s'arrête jamais (on dirait qu'il trouve aps la fin du fichier), donc si vous pouvez m'eclairer ;)
 
try {
 FileReader text = new FileReader(fichier);
 int caractere;
 String mot = "";
 do {
  do {
   caractere = text.read();
   if (caractere != -1){
    mot += (char)caractere;
   }
  }while(caractere != 59);
  System.out.println(mot);
  mot = "";
 }while (caractere != -1);
} catch (FileNotFoundException e) {
 System.out.println("Exception fichier non trouvé : " + e.getMessage());
} catch (IOException e) {
 System.out.println("Exception entrée/sortie : " + e.getMessage());
}

Reply

Marsh Posté le 25-06-2004 à 08:23:51   

Reply

Marsh Posté le 25-06-2004 à 08:25:03    

y'a pas EOF en java ?
 
edit : les balises cpp c'est pas juste pour faire beau [:dawa]


Message édité par black_lord le 25-06-2004 à 08:25:38

---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 25-06-2004 à 08:43:07    

pourquoi tu te contente d'un FileReader bas-niveau alors qu'il te faudrait un BufferedReader ?

Reply

Marsh Posté le 25-06-2004 à 08:48:38    

tu peux un peu plus precis ???
je suis pas encore un pro, et meme avec la doc j'ai un peu de mal ;)
 
merci

Reply

Marsh Posté le 25-06-2004 à 09:10:10    

ben lis la doc ;)
 
le bufferedReader a une méthode qui te permet de lire ligne par ligne....et y'a un flag qui te dit si y'a encore une ligne dispo...


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 25-06-2004 à 09:34:40    

en fait j'ai trouve ca :
 
FileReader text = new FileReader(fichier);
BufferedReader temp=new BufferedReader(text);
String mot = "";
String ligne;
do {
 ligne=temp.readLine();
 System.out.println(ligne);
}while (ligne!=null);
 
et donc il m'affiche une fois "null" car j'ai pas trouve de flag qui dit qu'il n'y a plus de ligne dispo

Reply

Marsh Posté le 25-06-2004 à 09:50:10    

il est idiot to do-while ...

Reply

Marsh Posté le 25-06-2004 à 09:55:24    

en fait le while j'ai remplace par :
while (temp.ready())
 
c'est mieux comme ca?

Reply

Marsh Posté le 25-06-2004 à 09:58:39    

c plus logique : si y'a plus de ligne ton readLine va te sortir une exception...qu'il ne fera pas si tu détectes AVANT qu'il n'y a plus de lignes


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 25-06-2004 à 10:07:04    

pourquoi ne pas tout simplement s'arrter quand readLine() retourne null ?

Reply

Marsh Posté le 25-06-2004 à 10:07:04   

Reply

Marsh Posté le 25-06-2004 à 10:09:34    

Jubijub a écrit :

ben lis la doc ;)
 
le bufferedReader a une méthode qui te permet de lire ligne par ligne....et y'a un flag qui te dit si y'a encore une ligne dispo...


 
Et sur chaque ligne, un petit coup de StringTokenizer ou de String.split()
et le tour est joué !!!

Reply

Marsh Posté le 25-06-2004 à 10:09:54    

la en tout cas ca parcous ton mon fichier, ca affiche bien tout et ca s'arrete une fois que le fichier est fini, donc jusque la c'est tout bon pour moi ;)
 
il me reste plus maintenant qu'a decouper chaques ligne en fonction des points virgule, et la ca va etre un peu plus long je pense

Reply

Marsh Posté le 25-06-2004 à 10:11:20    

Taz a écrit :

pourquoi ne pas tout simplement s'arrter quand readLine() retourne null ?


 
genre avec un while(true) et un return if readLine() == null ?
ou alors tu parles d'un while(readLine() != null) ?
 
ce qui revient un peu au même en fait :D


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 25-06-2004 à 10:13:15    

jeromejanson a écrit :

la en tout cas ca parcous ton mon fichier, ca affiche bien tout et ca s'arrete une fois que le fichier est fini, donc jusque la c'est tout bon pour moi ;)
 
il me reste plus maintenant qu'a decouper chaques ligne en fonction des points virgule, et la ca va etre un peu plus long je pense


 
Non, c super rapide :  
 
StringTokenizer est ton ami

Code :
  1. StringTokenizer st = new StringTokenizer(taLigneADecouper, ";" );
  2. while (st.hasMoreTokens()) {
  3.     String monPetitBoutAStocker = st.nextToken();
  4. }



---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 25-06-2004 à 10:16:52    

c'est ce que je venais de voir sur la doc ;)
 
en tout cas merci les gars :p ;)

Reply

Marsh Posté le 25-06-2004 à 10:31:12    

y'a String.split() aussi, mais si tu l'utilise compile ta regexp pour pas perdre en perfs...
 
le StringTokenizer c super performant, donc privilégie le (même si Sun ne recommande plus l'usage, c pas encore deprecated, faut foncer :D)


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 25-06-2004 à 10:34:06    

Jubijub a écrit :

genre avec un while(true) et un return if readLine() == null ?
ou alors tu parles d'un while(readLine() != null) ?
 
ce qui revient un peu au même en fait :D

genre pas du tout.
 
 
c'est quoi votre problème avec la méthode canonique
 
while( (line = is.readLine()) != null )
{
  // traiter line
}
 
?

Reply

Marsh Posté le 25-06-2004 à 10:49:01    

je vois pas l'intéret du line = au début...
is.readLine()) != null : ca je comprends, mais quel est l"intéret d'affecter la ligne dans le while ?


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 25-06-2004 à 11:02:26    

Jubijub a écrit :

je vois pas l'intéret du line = au début...
is.readLine()) != null : ca je comprends, mais quel est l"intéret d'affecter la ligne dans le while ?

ben pour récupérer la valeur voyons
sinon elle est perdue dans la nature


---------------
http://runnerstats.net
Reply

Marsh Posté le 25-06-2004 à 11:03:29    

hum oui c pas con...sinon tu lis qu'une ligne sur 2 si tu rappelles le readline dans le corps de la méthode...
 
g honte, je me suis fait fourrer récemment avec le même genre de connerie sur un Iterator...


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 25-06-2004 à 11:07:40    

oh putain le niveau :ouch:

Reply

Marsh Posté le 25-06-2004 à 11:29:37    

je suis pas un warlord de la prog moi... [:joce] je débuterai plutot même...mais là j'admet avoir posté la question trop vite, c'est assez évident...


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 25-06-2004 à 12:16:58    

en tout cas merci les gars, j'ai réussi a faire exactement ce que je voulais ;)

Reply

Marsh Posté le 25-06-2004 à 12:26:37    

en fait depuis que je fais j'arrive a faire marcher ca je me suis rend u compte que j'avais un message dans le fichier stdout.log au demarrage de tomcat, je pense vraiment que ca a un rapport avec ce que je fais :
 
25 juin 2004 12:19:47 org.apache.catalina.session.StandardManager doLoad
GRAVE: "IOException" lors du chargement des sessions persistantes: java.io.EOFException
java.io.EOFException
 at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2150)
 at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2619)
 at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:726)
 at java.io.ObjectInputStream.<init>(ObjectInputStream.java:251)
 at org.apache.catalina.util.CustomObjectInputStream.<init>(CustomObjectInputStream.java:56)
 at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:384)
 at org.apache.catalina.session.StandardManager.load(StandardManager.java:343)
 at org.apache.catalina.session.StandardManager.start(StandardManager.java:657)
 at org.apache.catalina.core.ContainerBase.setManager(ContainerBase.java:499)
 at org.apache.catalina.startup.ContextConfig.managerConfig(ContextConfig.java:315)
 at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:635)
 at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:216)
 at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4268)
 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:823)
 at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:807)
 at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:595)
 at org.apache.catalina.core.StandardHostDeployer.install(StandardHostDeployer.java:277)
 at org.apache.catalina.core.StandardHost.install(StandardHost.java:832)
 at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:683)
 at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:432)
 at org.apache.catalina.startup.HostConfig.start(HostConfig.java:964)
 at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:349)
 at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1091)
 at org.apache.catalina.core.StandardHost.start(StandardHost.java:789)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083)
 at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:478)
 at org.apache.catalina.core.StandardService.start(StandardService.java:476)
 at org.apache.catalina.core.StandardServer.start(StandardServer.java:2298)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:556)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:324)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:284)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:422)
25 juin 2004 12:19:47 org.apache.catalina.session.StandardManager start
GRAVE: Exception au chargement des sessions depuis le stockage persistant (persistent storage)
java.io.EOFException
 at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2150)
 at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2619)
 at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:726)
 at java.io.ObjectInputStream.<init>(ObjectInputStream.java:251)
 at org.apache.catalina.util.CustomObjectInputStream.<init>(CustomObjectInputStream.java:56)
 at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:384)
 at org.apache.catalina.session.StandardManager.load(StandardManager.java:343)
 at org.apache.catalina.session.StandardManager.start(StandardManager.java:657)
 at org.apache.catalina.core.ContainerBase.setManager(ContainerBase.java:499)
 at org.apache.catalina.startup.ContextConfig.managerConfig(ContextConfig.java:315)
 at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:635)
 at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:216)
 at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4268)
 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:823)
 at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:807)
 at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:595)
 at org.apache.catalina.core.StandardHostDeployer.install(StandardHostDeployer.java:277)
 at org.apache.catalina.core.StandardHost.install(StandardHost.java:832)
 at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:683)
 at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:432)
 at org.apache.catalina.startup.HostConfig.start(HostConfig.java:964)
 at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:349)
 at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1091)
 at org.apache.catalina.core.StandardHost.start(StandardHost.java:789)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083)
 at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:478)
 at org.apache.catalina.core.StandardService.start(StandardService.java:476)
 at org.apache.catalina.core.StandardServer.start(StandardServer.java:2298)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:556)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:324)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:284)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:422)
 
j'ai directement verifier si je fermer bien le stream, et c bon
donc si c'est quelque chose que vous avez deja vu ;)
 
merci

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed