Diferència entre revisions de la pàgina «DAM-M3-UF5. Lectura i escriptura. Fitxers»

De Wiki IES Marianao. Departament Informàtica
Dreceres ràpides: navegació, cerca
(Mètodes bàsics)
(Readers / Writers)
Línia 76: Línia 76:
  
 
Les classes utilitzades hereten de '''java.io.Reader''' i de '''Java.io.Writer'''
 
Les classes utilitzades hereten de '''java.io.Reader''' i de '''Java.io.Writer'''
 +
 +
 +
'''Exemple lectura de consola''', obliga a gestionar les excepcions
 +
 +
<pre>
 +
public static void main(String[] args) throws IOException {
 +
        //primer();
 +
 +
        InputStreamReader is = new InputStreamReader(System.in);        // Entrada, estandard
 +
 +
        BufferedReader in = new BufferedReader(is);            // buffer 
 +
 +
        String text = in.readLine(); //Lectura String
 +
     
 +
        int num = Integer.parseInt(in.readLine()); //Lectura Enter
 +
        ...
 +
}
 +
 +
</pre>
 +
 +
'''Exemple entrada de fitxers''', observar que també usa la classe ''BufferedReader'', una vegada inicialitzat aquest el tractament és independent del tipus d'entrada.
 +
 +
<pre>
 +
        File fitxer = new File("nom");    // Adreçament relatiu 
 +
        FileReader fr = null;        // Entrada
 +
        BufferedReader br;            // buffer 
 +
        String linea;
 +
 +
        try {
 +
            fr = new FileReader (fitxer); // Inicialitza entrada del fitxer
 +
            br = new BufferedReader(fr);    // Inicialitza buffer amb l’entrada
 +
            while((linea=br.readLine())!=null)  {
 +
                System.out.println(linea);
 +
            }
 +
        } catch (FileNotFoundException e) {
 +
            System.out.println("Fitxer no existeix");
 +
        } catch (IOException e) {
 +
            System.out.println(e.getMessage());
 +
        } finally {
 +
            if (fr != null) fr.close();
 +
        }
 +
</pre>
 +
 +
 +
'''Exemple escriptura a fitxer'''
 +
 +
<pre>
 +
        boolean append = true;
 +
        FileWriter fw = new FileWriter("nom", append);
 +
        PrintWriter pw = new PrintWriter(fw, true);
 +
       
 +
        try {
 +
            int i = 0;
 +
            while (i < 10) {
 +
                pw.println("linia " + i++);
 +
            }
 +
        } catch (Exception e) {
 +
            System.out.println(e.getMessage());
 +
        } finally {
 +
            fw.close();
 +
        }
 +
</pre>

Revisió del 23:26, 6 set 2012

torna M3 - Programació

Lectura i escriptura

Hi ha múltiples ocasions on cal introduir dades a un programa o mostra-les a la sortida, per exemple:

  • Línia de comandes
  • Formulari amb elements gràfics
  • Fitxers
  • Pipes o sockets


Mètodes bàsics

A través de la entrada i sortida estàndard

  • System.in
  • System.out

La classe Scanner

La classe Scanner és una funció d'utilitat simple per a la lectura de dades tipus primitius (int, String, etc...) o qualsevol Objecte que implementi Readable.

Trenca la lectura segons el delimitador (Per defecte un espai en blanc, encara que es pot modificar)

        Scanner sc = new Scanner( System.in );

        System.out.print( "Escriu un text: " );
        String dada = sc.next();
        System.out.println( "Has escrit: " + dada);


A més implementa la interface Iterator de manera que permet gestionar la lectura amb les operacions de control dels iteradors

  • hasNext()
  • next()
        do {
            System.out.print( "Escriu \"Fi\" per acabar: " );
            dada = sc.next();
           
        } while (!dada.equals("Fi"));

També permet definir diferents tipus d'entrada com fitxers o cadenes de text, i té mètodes específics per a la lectura d'enters, decimals, etc...


        String dada = "aaa bbb ccc ddd";
        Scanner sc = new Scanner(dada);
        do {
            dada = sc.next();
            System.out.println( "Conté: " + dada);           
        } while (sc.hasNext());

        dada = "1 2 3 4";
        Scanner sc = new Scanner(dada);
        do {
            System.out.println( "Conté: " + sc.nextInt());           
        } while (sc.hasNextInt());


Readers / Writers

A part dels sistemes anteriors, Java proporciona una capa d'utilitats entre la entrada i l'usuari que permet fer un tractament semblant independentment del tipus d'entrada o sortida que es faci servir.

Gestiona aquestes operacions establint uns corrents o canals (stream), a través dels quals trasllada blocs de dades (buffer).

Les classes utilitzades hereten de java.io.Reader i de Java.io.Writer


Exemple lectura de consola, obliga a gestionar les excepcions

public static void main(String[] args) throws IOException {
        //primer();

        InputStreamReader is = new InputStreamReader(System.in);        // Entrada, estandard

        BufferedReader in = new BufferedReader(is);            // buffer   

        String text = in.readLine(); //Lectura String
       
        int num = Integer.parseInt(in.readLine()); //Lectura Enter
        ...
}

Exemple entrada de fitxers, observar que també usa la classe BufferedReader, una vegada inicialitzat aquest el tractament és independent del tipus d'entrada.

        File fitxer = new File("nom");    // Adreçament relatiu   
        FileReader fr = null;        // Entrada
        BufferedReader br;            // buffer   
        String linea;

        try {
            fr = new FileReader (fitxer); // Inicialitza entrada del fitxer
            br = new BufferedReader(fr);     // Inicialitza buffer amb l’entrada
            while((linea=br.readLine())!=null)  {
                System.out.println(linea);
            }
        } catch (FileNotFoundException e) {
            System.out.println("Fitxer no existeix");
        } catch (IOException e) {
            System.out.println(e.getMessage());
        } finally {
            if (fr != null) fr.close();
        }


Exemple escriptura a fitxer

        boolean append = true;
        FileWriter fw = new FileWriter("nom", append);
        PrintWriter pw = new PrintWriter(fw, true);
         
        try {
            int i = 0;
            while (i < 10) {
                pw.println("linia " + i++);
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            fw.close();
        }