martedì 5 novembre 2013

Q27

Given that myFile.txt contains:

First
Second
Third

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class ReadFile04 {
     public static void main(String[] args) {
          try (BufferedReader buffIn = new BufferedReader(new FileReader(
                     "D:\\faculty\\myfile.txt"))) {
                String line = "";
                int count = 1;
 

                buffIn.mark(1);
               

                line = buffIn.readLine();
                System.out.println(count + ": " + line);
               

                line = buffIn.readLine();
                count++;
                System.out.println(count + ": " + line);
                buffIn.reset();
               

                line = buffIn.readLine();
                count++;
                System.out.println(count + ": " + line);
 

          } catch (IOException e) {
                System.out.println("IOException");
          }
     }
}
What is the result?

A.
1: First
2: Second
3: Third

B.
1 : First
2: Second
3: First

C.
1: First
2: First
3: First

D.
IOExcepton

E.
Compilation fails

 

Risposta B

readLine() legge una riga di testo dallo stream di ingresso restituendo una stringa.
una riga finisce quando nello stream si incontrano le sequenze "\n",  "\r", oppure "\r\n" e queste sequenze non vengono restituite nella stringa.
Quindi ad ogni readline il programma legge la riga corrente e si posiziona alla riga successiva.
Invece mark consente di mettere un segnalino in un punto dello stream e con il comando reset di tornare al punto marcato.

Quindi il codice esegue queste operazioni:
1)    si marca lo stream in questo punto, cioè all'inizio.
2)    si legge e si stampa la prima riga. Readline ci posiziona alla riga successiva, quindi alla seconda.
3)    si legge e si stampa la riga corrente, quindi la seconda. Readline ci posiziona alla riga successiva, quindi alla terza.
4)    si fa il reset, quindi si ritorna alla marcatura e quindi alla prima riga.
5)    si legge e si stampa la riga corrente, quindi la prima. Readline ci posiziona alla riga successiva, quindi alla seconda ma intanto il programma è arrivato alla fine.
 

Nessun commento:

Posta un commento