Diferència entre revisions de la pàgina «DAM-M3-UF5. Lectura i escriptura. Fitxers»
(→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(); }