Java: Lecture d'un fichier

Steph-24

Membre expert
Club iGen
11 Janvier 2006
1 388
59
38
Strasbourg
Dans le cadre d'un projet sur la théorie des graphes à implémenter, je dois arriver à lire des informations contenu dans un fichier, à partir de mon application java.

Voilà un morceau du fichier à lire :

1 3 45 25 4 2 3 53 20 4 3 3 98 17 4 4 4 11 15 4
5 5 8 42 5 6 6 94 20 4 7 6 96 60 3 8 7 8 12 4
9 7 17 85 4 10 8 5 42 5 11 8 7 12 4 12 8 9 8 4
13 9 8 8 4 14 9 10 48 3 15 10 9 48 3 16 10 11 12 4
17 10 12 34 4 18 11 4 15 4 19 11 10 12 4 20 11 29 45 5

En fait, c'est pas très visible, mais chaque ligne contient 4 blocs de 5 nombres. (les nombres sont séparés par 1 espace et les blocs pas 2 espaces)
Ce que je dois faire, c'est récupérer les 5 nombres du premier bloc, les stockés dans différents tableaux, et ensuite passer au bloc suivant. Et ainsi de suite.

J'arrive à accéder au fichiers, et à afficher son contenu, mais j'ai du mal à trouver une méthode simple pour accéder facilement à chaque nombre.

Donc si quelqu'un a une idée...

Merci :up:
 
Dans le cadre d'un projet sur la théorie des graphes à implémenter, je dois arriver à lire des informations contenu dans un fichier, à partir de mon application java.

Voilà un morceau du fichier à lire :



En fait, c'est pas très visible, mais chaque ligne contient 4 blocs de 5 nombres. (les nombres sont séparés par 1 espace et les blocs pas 2 espaces)
Ce que je dois faire, c'est récupérer les 5 nombres du premier bloc, les stockés dans différents tableaux, et ensuite passer au bloc suivant. Et ainsi de suite.

J'arrive à accéder au fichiers, et à afficher son contenu, mais j'ai du mal à trouver une méthode simple pour accéder facilement à chaque nombre.

Donc si quelqu'un a une idée...

Merci :up:
je ne connais pas Java, mais en parsant le contenu du fichier avec des regular expressions ça devrait marcher :)
 
Suffit d'utiliser String [] split(regex) de la classe String.
Avec la regex pour un ou deux espaces, et tu récupèreras un ensemble de nombres ou chaque nombre.
Apres un simple convertion de chaine vers nombre.
 
J'ai un peu chercher mais je ne comprend pas vraiment comment utiliser la méthode Split
si c'est pareil qu'en PHP ou en Perl, la méthode prend deux arguments :
le premier est une regexp qui doit matcher le spéarateur (donc un espace ou deux dans ton cas),
le second est le texte auquel tu va appliquer le split, mais peut-être qu'en java ce texte est avant genre text.split('/ {1,2}/'); ou alors split('/ {1,2}/', text);

:)
 
split() est une méthode de la classe String, donc:

String ma_chaine;


String [] num = ma_chaine.split(regex);
 
Mieux que la méthode split(), je te conseille plutôt de regarder du côté de la classe StreamTokenizer (ou éventuellement StringTokenizer en faisant une lecture ligne par ligne, c'est la solution entre split et StreamTokenizer). L'avantage est que tu peux directement récupérer la valeur numérique et que tu utilises une API de plus haut niveau que la méthode de java.lang.String.
 
Effectivement, y aussi la solution du tokenizer.
J'y pensais même plus.
 
Mieux que la méthode split(), je te conseille plutôt de regarder du côté de la classe StreamTokenizer (ou éventuellement StringTokenizer en faisant une lecture ligne par ligne, c'est la solution entre split et StreamTokenizer). L'avantage est que tu peux directement récupérer la valeur numérique et que tu utilises une API de plus haut niveau que la méthode de java.lang.String.

J'ai essayé d'utiliser la méthode StreamTokenizer mais je n'arrive pas à l'exploiter.
Est-ce que tu pourrais me donner un exemple ? :)
 
J'ai tout de même dit une mini-bêtise avant. L'utilisation de StringTokenizer est découragée par l'API :
StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.

Voici un exemple d'utilisation de StreamTokenizer. Autrement, il suffit de lire le javadoc.