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 22: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();
}