parcourir un fichier texte - Java - Programmation
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
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 ?
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
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
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?
Marsh Posté le 25-06-2004 à 10:07:04
pourquoi ne pas tout simplement s'arrter quand readLine() retourne null ?
Marsh Posté le 25-06-2004 à 10:09:34
Jubijub a écrit : ben lis la doc |
Et sur chaque ligne, un petit coup de StringTokenizer ou de String.split()
et le tour est joué !!!
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
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
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 |
Non, c super rapide :
StringTokenizer est ton ami
Code :
|
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
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 )
Marsh Posté le 25-06-2004 à 10:34:06
Jubijub a écrit : genre avec un while(true) et un return if readLine() == null ? |
genre pas du tout.
c'est quoi votre problème avec la méthode canonique
while( (line = is.readLine()) != null )
{
// traiter line
}
?
Marsh Posté le 25-06-2004 à 11:02:26
Jubijub a écrit : je vois pas l'intéret du line = au début... |
ben pour récupérer la valeur voyons
sinon elle est perdue dans la nature
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
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
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());
}