Diferència entre revisions de la pàgina «DAM-M3-UF5. Lectura i escriptura. Fitxers»
(→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 20:42, 9 set 2012
torna M3 - Programació
Contingut
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]);
}