bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


java_lectura_escriptura

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
Ultima revisió Ambdós costats nova versio
java_lectura_escriptura [2022/11/24 15:57]
albert_palacios_jimenez
java_lectura_escriptura [2022/11/24 17:00]
albert_palacios_jimenez
Línia 1: Línia 1:
 ====== Lectura i escriptura d'arxius a Java ====== ====== Lectura i escriptura d'arxius a Java ======
  
-{{tag> #FpInfor #Dam #DamMp06 #DamMp06Uf1 #DamMp06Uf01 }}+{{tag> #FpInfor #Dam #DamMp06 #DamMp06Uf1 #DamMp06Uf01}}
  
 ---- ----
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 84: Línia 85:
 } }
 </code> </code>
 +
 +
 +==== DataOutputStream i DataInputStream ====
 +
 +Per guardar dades primitives de manera ordenada en arxius, hi ha les classes "**DataOutputStream**" i "**DataInputStream**". Les dades, s'han de llegir en el mateix ordre que s'han guardat.
 +
 +Exemple de guardar dades primitives amb "DataOutputStream":
 +
 +<code java>
 +File file = new File("outin.bin");
 +      
 +FileOutputStream fileOutputStream = null;
 +DataOutputStream dataOutputStream = null;
 +try {
 +    fileOutputStream=new FileOutputStream(file);
 +    dataOutputStream=new DataOutputStream(fileOutputStream);
 +    dataOutputStream.writeInt(50);
 +    dataOutputStream.writeDouble(400.25);
 +    dataOutputStream.writeUTF(“Hola”);
 +    dataOutputStream.flush();
 +} catch (IOException e) {
 +    e.printStackTrace();
 +} finally {
 +    try {
 +        if(fileOutputStream!=null){ fileOutputStream.close(); }
 +        if(dataOutputStream!=null){ dataOutputStream.close(); }
 +    } catch (Exception e) {
 +        e.printStackTrace();
 +    }
 +}
 +</code>
 +
 +Exemple de llegir dades primitives amb "DataInputStream":
 +(Es llegeixen en l'ordre que s'han escrit)
 +
 +<code java>
 +FileInputStream fileInputStream = null;
 +DataInputStream dataInputStream = null;
 +try {
 +   fileInputStream = new FileInputStream(file);
 +   dataInputStream = new DataInputStream(fileInputStream);
 +   System.out.println(dataInputStream.readInt());
 +   System.out.println(dataInputStream.readDouble());
 +   System.out.println(dataInputStream.readUTF());
 +} catch (IOException e) {
 +   e.printStackTrace();
 +}finally {
 +   try {
 +     if(fileInputStream!=null){ fileInputStream.close(); }
 +     if(dataInputStream!=null){ dataInputStream.close(); }
 +   } catch (Exception e) {
 +      e.printStackTrace();
 +   }
 +}
 +</code>
 +
 +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.
 +
  
 ==== Serialitzar ==== ==== Serialitzar ====
Línia 182: Línia 241:
  
 **Nota**: Cal tenir en compte, que els objectes serialitzats només es poden llegir en la mateixa versió de Java. **Nota**: Cal tenir en compte, que els objectes serialitzats només es poden llegir en la mateixa versió de Java.
- 
-==== DataOutputStream i DataInputStream ==== 
- 
-Per guardar dades primitives de manera ordenada en arxius, hi ha les classes "**DataOutputStream**" i "**DataInputStream**". Les dades, s'han de llegir en el mateix ordre que s'han guardat. 
- 
-Exemple de guardar dades primitives amb "DataOutputStream": 
- 
-<code java> 
-File file = new File("outin.bin"); 
-       
-FileOutputStream fileOutputStream = null; 
-DataOutputStream dataOutputStream = null; 
-try { 
-    fileOutputStream=new FileOutputStream(file); 
-    dataOutputStream=new DataOutputStream(fileOutputStream); 
-    dataOutputStream.writeInt(50); 
-    dataOutputStream.writeDouble(400.25); 
-    dataOutputStream.writeUTF(“Hola”); 
-    dataOutputStream.flush(); 
-} catch (IOException e) { 
-    e.printStackTrace(); 
-} finally { 
-    try { 
-        if(fileOutputStream!=null){ fileOutputStream.close(); } 
-        if(dataOutputStream!=null){ dataOutputStream.close(); } 
-    } catch (Exception e) { 
-        e.printStackTrace(); 
-    } 
-} 
-</code> 
- 
-Exemple de llegir dades primitives amb "DataInputStream": 
-(Es llegeixen en l'ordre que s'han escrit) 
- 
-<code java> 
-FileInputStream fileInputStream = null; 
-DataInputStream dataInputStream = null; 
-try { 
-   fileInputStream = new FileInputStream(file); 
-   dataInputStream = new DataInputStream(fileInputStream); 
-   System.out.println(dataInputStream.readInt()); 
-   System.out.println(dataInputStream.readDouble()); 
-   System.out.println(dataInputStream.readUTF()); 
-} catch (IOException e) { 
-   e.printStackTrace(); 
-}finally { 
-   try { 
-     if(fileInputStream!=null){ fileInputStream.close(); } 
-     if(dataInputStream!=null){ dataInputStream.close(); } 
-   } catch (Exception e) { 
-      e.printStackTrace(); 
-   } 
-} 
-</code> 
- 
-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'arxius amb dades de List<String> ==== ==== Escriptura i lectura d'arxius amb dades de List<String> ====
Línia 492: Línia 495:
     }     }
 } }
-</code> 
- 
-==== 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 "DocumentBuilderFactory", per obtenir el "Document" amb les dades, per exemple: 
- 
-<code java> 
-       try { 
-           DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
-           DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
-           Document doc = dBuilder.parse(file); 
-           doc.getDocumentElement().normalize(); 
-           NodeList listStudents = doc.getElementsByTagName("student"); 
-           System.out.println("Número d'estudiants: " + listStudents.getLength()); 
-       }} catch(Exception e) { e.printStackTrace(); } 
-</code> 
- 
-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(); cnt = cnt + 1) { 
-       Node nodeEstudiant = listStudents.item(cnt); 
-       if(nodeEstudiant.getNodeType() == nodeEstudiant.ELEMENT_NODE) { 
-               Element elm = (Element) nodeEstudiant; 
-               String txt = ""; 
-               txt = txt + "> Student "    + elm.getAttribute("id"); 
-               txt = txt + ", Name: "      + elm.getElementsByTagName("name").item(0).getTextContent(); 
-               System.out.println(txt); 
-} 
-</code> 
- 
-Cal fixar-se que es comprova que els elements siguin de tipus "ELEMENT_NODE" i no de text, per tal de poder fer el "**cast**" cap a "Element" 
- 
-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'arbre XML, es pot fer servir XPath 
- 
-<code java> 
-Document doc = dBuilder.parse(file); 
- 
-XPath xPath = XPathFactory.newInstance().newXPath(); 
-String expression = "/root/students/student[@id='id_e01']"; 
-NodeList listExpression = (NodeList) xPath.compile(expression).evaluate(doc, XPathConstants.NODESET); 
- 
-Element elm = (Element) listExpression.item(0); 
-                   
-String txt = ""; 
-txt = txt + "> Student "    + elm.getAttribute("id"); 
-txt = txt + ", Name: "      + elm.getElementsByTagName("name").item(0).getTextContent(); 
- 
-System.out.println(txt); 
-</code> 
- 
-En l'exemple anterior es busquen tots els estudiants que tinguin l'atribut "id" amb valor "id_e01" 
- 
-== Generar un arbre XML amb elements i atributs == 
- 
-Aquest exemple mostra com es pot generar un arbre XML amb elements i atributs: 
- 
-<code java> 
-            
-           DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
-           DocumentBuilder db = dbf.newDocumentBuilder(); 
-           Document doc = db.newDocument(); 
-       
-           Element elmRoot = doc.createElement("note"); 
-           doc.appendChild(elmRoot); 
-       
-           Element elmTo = doc.createElement("to"); 
-           elmTo.appendChild(doc.createTextNode("John")); 
-           elmRoot.appendChild(elmTo); 
-       
-           Attr attrId = doc.createAttribute("id"); 
-           attrId.setValue("1"); 
-           elmTo.setAttributeNode(attrId); 
-</code> 
- 
-Finalment, per escriure un arbre XML com l'anterior en un arxiu: 
- 
- 
- 
-<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, "no"); 
-            transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
-            trimWhitespace(doc); 
-            DOMSource source = new DOMSource(doc); 
-            StreamResult result = new StreamResult(new File(path)); 
-            transformer.transform(source, result); 
-        } catch (TransformerException e) { e.printStackTrace(); } 
-    } 
 </code> </code>
  
java_lectura_escriptura.txt · Darrera modificació: 2022/11/24 17:02 per albert_palacios_jimenez