Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
java_lectura_escriptura [2022/11/24 15:57] albert_palacios_jimenez |
java_lectura_escriptura [2022/11/24 17:02] (actual) albert_palacios_jimenez |
||
---|---|---|---|
Línia 1: | Línia 1: | ||
====== Lectura i escriptura d' | ====== Lectura i escriptura d' | ||
- | {{tag> #FpInfor #Dam #DamMp06 #DamMp06Uf1 # | + | {{tag> #FpInfor #Dam #DamMp06 #DamMp06Uf1 # |
---- | ---- | ||
Línia 10: | Línia 10: | ||
- De text: guarden dades en format text (caràcters llegibles) | - De text: guarden dades en format text (caràcters llegibles) | ||
+ | |||
- Binaris: guarden dades en format binari (0s i 1s) | - Binaris: guarden dades en format binari (0s i 1s) | ||
Per llegir arxius de text fem servir dues classes: | Per llegir arxius de text fem servir dues classes: | ||
- | - **File**: representa una ruta al sistema de fitxers | + | - **File**: representa una ruta al sistema de fitxers, i permet |
* Manipular la jerarquia d’arxius (crear arxius i carpetes, borrar, renombrar …) | * Manipular la jerarquia d’arxius (crear arxius i carpetes, borrar, renombrar …) | ||
Línia 85: | Línia 86: | ||
</ | </ | ||
- | ==== Serialitzar ==== | ||
+ | ==== Escriptura i lectura d' | ||
- | Serialitzar és transformar un objecte en una cadena | + | Per escriure arxius per guardar-hi les dades d'una llista |
- | Serialitzar permet guardar objectes JAVA en arxius o transmetre’ls a través de la xarxa. | ||
- | |||
- | Per fer que una classe sigui serialitzable en JAVA ha de implementar: | ||
- | |||
- | Exemple de guardar un objecte " | ||
- | |||
- | StreamEmployee.java | ||
<code java> | <code java> | ||
- | import java.io.Serializable; | + | import java.io.IOException; |
+ | import java.nio.charset.Charset; | ||
+ | import java.nio.file.Files; | ||
+ | import java.nio.file.Path; | ||
+ | import java.nio.file.Paths; | ||
+ | import java.util.ArrayList; | ||
+ | import java.util.List; | ||
- | public class StreamEmployee implements Serializable { | + | // Aquest exemple escriu els continguts |
+ | // d'una List< | ||
- | private | + | public class EscripturaArxiuList { |
- | | + | public |
- | private | + | String |
- | private int age; | + | String |
- | | + | |
- | | + | System.out.println("" |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | } | + | |
- | } | + | |
- | </code> | + | try { |
+ | List<String> linies = new ArrayList< | ||
+ | linies.add(" | ||
+ | linies.add(" | ||
+ | linies.add(" | ||
+ | linies.add(" | ||
+ | linies.add(" | ||
+ | linies.add(" | ||
- | StreamWriteMain.java | + | Path out = Paths.get(filePath); |
- | <code java> | + | Files.write(out, linies, Charset.defaultCharset()); |
- | import java.io.FileOutputStream; | + | |
- | import java.io.ObjectOutputStream; | + | |
- | import java.io.IOException; | + | |
- | public class StreamWriteMain { | + | System.out.println(" |
- | | + | |
- | | + | |
- | + | } | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | + | ||
- | try { | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | } catch (IOException e) { e.printStackTrace(); | + | |
- | | + | |
} | } | ||
</ | </ | ||
- | Exemple de com llegir | + | Per llegir |
- | StreamReadMain.java | ||
<code java> | <code java> | ||
- | import java.io.FileInputStream; | ||
- | import java.io.FileNotFoundException; | ||
- | import java.io.FileOutputStream; | ||
- | import java.io.ObjectInputStream; | ||
- | import java.io.ObjectOutputStream; | ||
import java.io.IOException; | import java.io.IOException; | ||
+ | import java.nio.charset.StandardCharsets; | ||
+ | import java.nio.file.Files; | ||
+ | import java.nio.file.Paths; | ||
+ | import java.util.List; | ||
- | public class StreamReadMain { | + | // Aquest exemple llegeix un arxiu de text en una List<String> |
- | | + | |
- | | + | public class LecturaArxiuList { |
- | try { | + | |
- | is = new FileInputStream("EmployeeObject.ser"); | + | |
- | ObjectInputStream ois = new ObjectInputStream(is); | + | |
- | | + | |
- | ois.close(); | + | System.out.println("" |
- | is.close(); | + | |
- | | + | try { |
- | | + | List< |
- | e.printStackTrace(); | + | for (int cnt = 0; cnt < linies.size(); cnt = cnt + 1) { |
- | } catch (IOException e) { e.printStackTrace(); | + | System.out.println(linies.get(cnt)); |
- | | + | } |
+ | } catch (IOException e) { e.printStackTrace(); | ||
+ | |||
+ | | ||
} | } | ||
</ | </ | ||
- | **Nota**: Cal tenir en compte, que els objectes serialitzats només es poden llegir en la mateixa versió de Java. | ||
==== DataOutputStream i DataInputStream ==== | ==== DataOutputStream i DataInputStream ==== | ||
Línia 239: | Línia 215: | ||
Cal tenir en compte que els objectes no són dades primitives i per tant no es poden guardar i llegir amb els mètodes anteriors. | Cal tenir en compte que els objectes no són dades primitives i per tant no es poden guardar i llegir amb els mètodes anteriors. | ||
- | ==== Escriptura i lectura d' | ||
- | Per escriure arxius per guardar-hi les dades d'una llista de textos, es pot fer amb: | + | ==== Serialitzar ==== |
+ | |||
+ | Serialitzar és transformar un objecte en una cadena de bytes que es poden llegir per reconstruir l’objecte original. | ||
+ | |||
+ | Serialitzar permet guardar objectes JAVA en arxius o transmetre’ls a través de la xarxa. | ||
+ | |||
+ | Per fer que una classe sigui serialitzable en JAVA ha de implementar: | ||
+ | |||
+ | Exemple de guardar un objecte " | ||
+ | |||
+ | StreamEmployee.java | ||
<code java> | <code java> | ||
- | import java.io.IOException; | + | import java.io.Serializable; |
- | import java.nio.charset.Charset; | + | |
- | import java.nio.file.Files; | + | |
- | import java.nio.file.Path; | + | |
- | import java.nio.file.Paths; | + | |
- | import java.util.ArrayList; | + | |
- | import java.util.List; | + | |
- | // Aquest exemple escriu els continguts | + | public class StreamEmployee implements Serializable { |
- | // d'una List< | + | |
- | public class EscripturaArxiuList { | + | private |
- | public | + | |
- | String | + | private |
- | String | + | private int age; |
+ | | ||
- | System.out.println("" | + | |
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | } | ||
- | try { | + | </code> |
- | List<String> linies = new ArrayList< | + | |
- | linies.add(" | + | |
- | linies.add(" | + | |
- | linies.add(" | + | |
- | linies.add(" | + | |
- | linies.add(" | + | |
- | linies.add(" | + | |
- | Path out = Paths.get(filePath); | + | StreamWriteMain.java |
- | Files.write(out, linies, Charset.defaultCharset()); | + | <code java> |
+ | import java.io.FileOutputStream; | ||
+ | import java.io.ObjectOutputStream; | ||
+ | import java.io.IOException; | ||
- | System.out.println(" | + | public class StreamWriteMain { |
+ | | ||
- | | + | |
- | } | + | |
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | try { | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | } catch (IOException e) { e.printStackTrace(); | ||
+ | | ||
} | } | ||
</ | </ | ||
- | Per llegir | + | Exemple de com llegir |
+ | StreamReadMain.java | ||
<code java> | <code java> | ||
+ | import java.io.FileInputStream; | ||
+ | import java.io.FileNotFoundException; | ||
+ | import java.io.FileOutputStream; | ||
+ | import java.io.ObjectInputStream; | ||
+ | import java.io.ObjectOutputStream; | ||
import java.io.IOException; | import java.io.IOException; | ||
- | import java.nio.charset.StandardCharsets; | ||
- | import java.nio.file.Files; | ||
- | import java.nio.file.Paths; | ||
- | import java.util.List; | ||
- | // Aquest exemple llegeix un arxiu de text en una List<String> | + | public class StreamReadMain { |
+ | | ||
- | public class LecturaArxiuList { | + | |
- | | + | try { |
- | | + | is = new FileInputStream("EmployeeObject.ser"); |
- | | + | ObjectInputStream ois = new ObjectInputStream(is); |
+ | | ||
- | System.out.println("" | + | ois.close(); |
- | + | is.close(); | |
- | try { | + | |
- | List< | + | |
- | for (int cnt = 0; cnt < linies.size(); cnt = cnt + 1) { | + | e.printStackTrace(); |
- | System.out.println(linies.get(cnt)); | + | } catch (IOException e) { e.printStackTrace(); |
- | } | + | |
- | } catch (IOException e) { e.printStackTrace(); | + | |
- | + | ||
- | | + | |
} | } | ||
</ | </ | ||
+ | |||
+ | **Nota**: Cal tenir en compte, que els objectes serialitzats només es poden llegir en la mateixa versió de Java. | ||
==== Escriptura i lectura d' | ==== Escriptura i lectura d' | ||
Línia 492: | Línia 496: | ||
} | } | ||
} | } | ||
- | </ | ||
- | |||
- | ==== Arxius XML ==== | ||
- | |||
- | Els arxius XML poden tenir un tractament especial, per tal de poder accedir directament a les dades que contenen a través del seu arbre. | ||
- | |||
- | Per llegir arxius XML fem servir " | ||
- | |||
- | <code java> | ||
- | try { | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | }} catch(Exception e) { e.printStackTrace(); | ||
- | </ | ||
- | |||
- | En aquest exemple es veu com es poden llegir els atributs i continguts dels elements d'un arxiu XML: | ||
- | |||
- | <code java> | ||
- | for(int cnt = 0; cnt < listStudents.getLength(); | ||
- | Node nodeEstudiant = listStudents.item(cnt); | ||
- | | ||
- | | ||
- | | ||
- | txt = txt + "> Student " | ||
- | txt = txt + ", Name: " | ||
- | | ||
- | } | ||
- | </ | ||
- | |||
- | Cal fixar-se que es comprova que els elements siguin de tipus " | ||
- | |||
- | Aleshores ja es poden llegir els atributs o els altres elements que tingui dins. | ||
- | |||
- | == XPath == | ||
- | |||
- | Per poder accedir més fàcilment als elements de l' | ||
- | |||
- | <code java> | ||
- | Document doc = dBuilder.parse(file); | ||
- | |||
- | XPath xPath = XPathFactory.newInstance().newXPath(); | ||
- | String expression = "/ | ||
- | NodeList listExpression = (NodeList) xPath.compile(expression).evaluate(doc, | ||
- | |||
- | Element elm = (Element) listExpression.item(0); | ||
- | | ||
- | String txt = ""; | ||
- | txt = txt + "> Student " | ||
- | txt = txt + ", Name: " | ||
- | |||
- | System.out.println(txt); | ||
- | </ | ||
- | |||
- | En l' | ||
- | |||
- | == Generar un arbre XML amb elements i atributs == | ||
- | |||
- | Aquest exemple mostra com es pot generar un arbre XML amb elements i atributs: | ||
- | |||
- | <code java> | ||
- | |||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | Attr attrId = doc.createAttribute(" | ||
- | | ||
- | | ||
- | </ | ||
- | |||
- | Finalment, per escriure un arbre XML com l' | ||
- | |||
- | |||
- | |||
- | <code java> | ||
- | // Save a Document into an XML file | ||
- | static public void write (String path, Document doc) { | ||
- | try { | ||
- | TransformerFactory transformerFactory = TransformerFactory.newInstance(); | ||
- | Transformer transformer = transformerFactory.newTransformer(); | ||
- | transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, | ||
- | transformer.setOutputProperty(OutputKeys.INDENT, | ||
- | trimWhitespace(doc); | ||
- | DOMSource source = new DOMSource(doc); | ||
- | StreamResult result = new StreamResult(new File(path)); | ||
- | transformer.transform(source, | ||
- | } catch (TransformerException e) { e.printStackTrace(); | ||
- | } | ||
</ | </ | ||