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
(Readers / Writers)
(Readers / Writers)
Línia 136: Línia 136:
 
         } finally {
 
         } finally {
 
             fw.close();
 
             fw.close();
 +
        }
 +
</pre>
 +
 +
 +
=== Fitxers. Classe File ===
 +
 +
La classe '''File''' permet treballar amb fitxers i directoris.
 +
 +
 +
<pre>
 +
        File f = new File("fitxer");
 +
     
 +
        if (f.exists()) System.out.println("el fitxer existeix");
 +
        else {
 +
            System.out.println("el fitxer NO existeix, el creem");
 +
            f.createNewFile();
 +
        }
 +
     
 +
        System.out.println("path: " + f.getPath());    // fitxer
 +
        System.out.println("path absolut: " + f.getAbsolutePath()); // {path_to_file}/fitxer
 +
        System.out.println("ultima modificació : " + new Date((long)f.lastModified()*1000));
 +
        System.out.println("longitud : " + f.length());
 +
     
 +
        f.setExecutable(true);
 +
     
 +
        if (f.canExecute()) System.out.println("execució");
 +
        if (f.canRead()) System.out.println("lectura");
 +
        if (f.canWrite()) System.out.println("escriptura");
 +
        if (f.isFile()) System.out.println("fitxer");
 +
        if (f.isDirectory()) System.out.println("directori");
 +
        if (f.isHidden()) System.out.println("ocult");
 +
     
 +
        File d = new File("directori");
 +
        if (d.exists()) System.out.println("el directori existeix");
 +
        else {
 +
            System.out.println("el directori NO existeix, el creem");
 +
            d.mkdir();
 +
        }
 +
        if (d.isDirectory()) System.out.println("directori");
 +
     
 +
        String[] fitxers = d.list();
 +
        for (int i = 0; i < fitxers.length; i++) {
 +
            System.out.println("fitxer " + fitxers[i]); 
 
         }
 
         }
 
</pre>
 
</pre>

Revisió del 21:42, 9 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();
        }


Fitxers. Classe File

La classe File permet treballar amb fitxers i directoris.


        File f = new File("fitxer");
       
        if (f.exists()) System.out.println("el fitxer existeix");
        else {
            System.out.println("el fitxer NO existeix, el creem");
            f.createNewFile();
        }
       
        System.out.println("path: " + f.getPath());    // fitxer
        System.out.println("path absolut: " + f.getAbsolutePath()); // {path_to_file}/fitxer
        System.out.println("ultima modificació : " + new Date((long)f.lastModified()*1000));
        System.out.println("longitud : " + f.length());
       
        f.setExecutable(true);
       
        if (f.canExecute()) System.out.println("execució");
        if (f.canRead()) System.out.println("lectura");
        if (f.canWrite()) System.out.println("escriptura");
        if (f.isFile()) System.out.println("fitxer");
        if (f.isDirectory()) System.out.println("directori");
        if (f.isHidden()) System.out.println("ocult");
       
        File d = new File("directori");
        if (d.exists()) System.out.println("el directori existeix");
        else {
            System.out.println("el directori NO existeix, el creem");
            d.mkdir();
        }
        if (d.isDirectory()) System.out.println("directori");
       
        String[] fitxers = d.list();
        for (int i = 0; i < fitxers.length; i++) {
            System.out.println("fitxer " + fitxers[i]);   
        }