# Equivalent de fscanf en Java?



## SuperCed (27 Novembre 2003)

Tout est dans le titre, je recherche un équivalent de fscanf en Java.
Pour rappel, voici l'utilité de fscanf en C:


  <font class="small">Code:</font><hr /><pre>


FILE *fp;
   char msg[512];
   int nb,i,dontCare,j;
   fp = fopen(path, "rt");
   if (!fp) return 1;
   strcpy(msg,"");
   while (strcmp(msg,"Mesh")) {
       nb = fscanf(fp,"%s\n",msg);
       if (nb!=1) return 2;
   }
   nb = fscanf(fp,"%s\n",msg);
   if (nb!=1) return 2;
   nb = fscanf(fp,"%s\n",msg);
   if (nb!=1) return 2;
   nb = fscanf(fp,"%d;\n",&amp;(data-&gt;nbVertices));
   if (nb!=1) return 2;
   data-&gt;verticesList = (vertexData*)malloc(data-&gt;nbVertices*sizeof(vertexData));
   if (!data-&gt;verticesList) return 3;
   for (i=0;i&lt;data-&gt;nbVertices-1;i++) {
       nb = fscanf(fp,"%f;%f;%f;,\n", &amp;(data-&gt;verticesList_.x), &amp;(data-&gt;verticesList.y), &amp;(data-&gt;verticesList.z));
       if (nb!=3) return 2;
   }
...

  </pre><hr /> _


----------



## SuperCed (29 Novembre 2003)

Je me réponds à moi même pour vous montrer qu'il faut à peu près 10 fonctions an java pour remplacer le fscanf du langage C :

<font class="small">Code:</font><hr /><pre>
try {
            FileReader fileIn = new FileReader(path);
            BufferedReader in = new BufferedReader(fileIn);
            LineNumberReader stream3 = new LineNumberReader(in);
            String line;
            line = stream3.readLine();
            System.out.println (line);
            System.out.println ("test1");
            while (line.lastIndexOf("Mesh") == -1) {
                line = stream3.readLine();
                System.out.println (line);
            }
            line = stream3.readLine();
            System.out.println (line);
            StringTokenizer st = new StringTokenizer(line);
            String temp = new String(st.nextToken());
            nbVertices = Integer.parseInt(temp.substring(0, temp.length()-1));
            System.out.println (nbVertices);
        }
        catch (IOException e) {
            System.out.println (e);
        }
</pre><hr />


----------



## antmuc (11 Décembre 2003)

En effet, la fonction fscanf n'existe pas en Java (tout comme la fonction scanf et pas mal de fonctions semblables...)

Cela dit une des étapes de ton code me semble inutile. La commande "readLine" est disponible dans la classe BufferedReader, tu n'as donc pas besoin de créer un LineNumberReader.
Si tu tiens à utiliser la classe LineNumberReader, tu peux l'instancier directement à partir du FileReader. Dans tous les cas une étape est de trop.


----------



## plumber (17 Décembre 2003)

je rappel qu'il existe les jni java native interface

quand j'ai besoin de fonctions manquante je fais une lib

ou alors tu peux ecrire un class ou une interface
fscanf


----------

