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:58] albert_palacios_jimenez |
java_lectura_escriptura [2022/11/24 17:02] (actual) albert_palacios_jimenez |
||
|---|---|---|---|
| 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(); | ||
| - | } | ||
| </ | </ | ||