commit 4690f33e269b7d064745ff29e382bc8f3b347f7f Author: Dani Minguet Date: Mon Oct 24 21:07:59 2022 +0200 P11 diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..57bca72 --- /dev/null +++ b/.classpath @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..c2743f6 --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + P11-CreacionXML + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..8c9943d --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,14 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=17 diff --git a/README.md b/README.md new file mode 100644 index 0000000..d3f4d6f --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ +# LEE EL FICHERO CON OBJETOS PERSONA Y LOS GUARDA EN UN FICHERO XML + +Para obtener los datos de las personas del primer fichero, he utilizado la misma metodología que en el ejercicio 8.2 + +Para escribir y crear el fichero XML: +- Mediante "DocumentBuilderFactory", "DocumentBuilder" y "Document" +- Creamos "Element" para crear los objetos y indicamos el objeto mediante el método ".createElement()" +- Mediante el método ".appendChid()" añadimos al fichero +- Mediante "Attr" creamos los atributos del objeto con la ayuda del método ".createAttribute()", después ".setValue()" para cambiar el valor y el nombre del element junto con el método ".setAttributeNode()" para guardarlo en el elemento +- Mediante "TransformerFactory", "Transformer", "DOMSource" y "StreamResult" para crear el fichero XML junto con los datos anteriormente creados + +Resultado terminal: + +``` +El archivo XML de personas se ha creado correctamente! +``` + +Resultado fichero XML: + +``` + + + + + + + +``` \ No newline at end of file diff --git a/bin/creacionxml/com/daniminguet/es/P11.class b/bin/creacionxml/com/daniminguet/es/P11.class new file mode 100644 index 0000000..40cc7c5 Binary files /dev/null and b/bin/creacionxml/com/daniminguet/es/P11.class differ diff --git a/bin/creacionxml/com/daniminguet/es/Persona.class b/bin/creacionxml/com/daniminguet/es/Persona.class new file mode 100644 index 0000000..6e8a90f Binary files /dev/null and b/bin/creacionxml/com/daniminguet/es/Persona.class differ diff --git a/src/creacionxml/com/daniminguet/es/P11.java b/src/creacionxml/com/daniminguet/es/P11.java new file mode 100644 index 0000000..6034a32 --- /dev/null +++ b/src/creacionxml/com/daniminguet/es/P11.java @@ -0,0 +1,134 @@ +package creacionxml.com.daniminguet.es; + +import java.io.EOFException; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.RandomAccessFile; +import java.util.ArrayList; + +import javax.xml.transform.Result; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.TransformerFactoryConfigurationError; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.w3c.dom.Attr; +import org.w3c.dom.DOMImplementation; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.w3c.dom.Text; + +public class P11 { + public static void main(String[] args) throws EOFException { + //Fichero de objetos Persona + File fichero = new File("C:\\Users\\Dani\\OneDrive\\Documentos\\AccesoADatos\\Personas.dat"); + //Guardamos los datos de las personas para poder crear el archivo XML + ArrayList personas = leerFichero(fichero); + //Comprueba que el archivo XML se ha creado correctamente + if(crearXml(personas)) { + System.out.println("El archivo XML de personas se ha creado correctamente!"); + } else { + System.out.println("Error al crear el archivo XML de personas"); + } + + } + + public static boolean crearXml(ArrayList personas) { + boolean creadoCorrectamente = false; + + try { + DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); + Document doc = docBuilder.newDocument(); + + //Se define el array de personas + Element personasXml = doc.createElement("Personas"); + doc.appendChild(personasXml); + + for(int i = 0; i < personas.size(); i++) { + //Se definen las personas + Element persona = doc.createElement("Persona"); + personasXml.appendChild(persona); + //Se definen los atributos de cada persona, se les asigna el valor adecuado y se añaden al elemento persona + Attr nombre = doc.createAttribute("nombre"); + nombre.setValue(personas.get(i).getNombre()); + persona.setAttributeNode(nombre); + Attr edad = doc.createAttribute("edad"); + edad.setValue(String.valueOf(personas.get(i).getEdad())); + persona.setAttributeNode(edad); + } + + //Se escribe el contenido del XML en un archivo + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + Transformer transformer = transformerFactory.newTransformer(); + DOMSource source = new DOMSource(doc); + StreamResult result = new StreamResult(new File("C:\\Users\\Dani\\OneDrive\\Documentos\\AccesoADatos\\Personas.xml")); + transformer.transform(source, result); + + creadoCorrectamente = true; + } catch (ParserConfigurationException pce) { + pce.printStackTrace(); + } catch (TransformerException tfe) { + tfe.printStackTrace(); + } + + return creadoCorrectamente; + } + + public static ArrayList leerFichero(File fichero) { + FileInputStream filein = null; + try { + filein = new FileInputStream(fichero); + } catch (FileNotFoundException e) { + throw new RuntimeException(e); + } + ObjectInputStream dataIS = null; + try { + dataIS = new ObjectInputStream(filein); + } catch (IOException ioe) { + + } + + String[] nombres; + int[] edades; + //Lee los datos del archivo + try { + nombres = (String[]) dataIS.readObject(); + edades = (int[]) dataIS.readObject(); + } catch (IOException e) { + throw new RuntimeException(e); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + + //Se crea la lista que contendrá las personas + ArrayList personas = new ArrayList<>(); + + //Se recorren los datos de las personas y se crean y añaden en la lista + for (int i = 0; i < nombres.length; i++) { + personas.add(new Persona(nombres[i], edades[i])); + } + + try { + dataIS.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + + return personas; + } +} diff --git a/src/creacionxml/com/daniminguet/es/Persona.java b/src/creacionxml/com/daniminguet/es/Persona.java new file mode 100644 index 0000000..2b60817 --- /dev/null +++ b/src/creacionxml/com/daniminguet/es/Persona.java @@ -0,0 +1,33 @@ +package creacionxml.com.daniminguet.es; + +import java.io.Serializable; + +public class Persona implements Serializable{ + private String nombre; + private int edad; + + public Persona(String nombre, int edad) { + this.nombre = nombre; + this.edad= edad; + } + + public Persona() { + this.nombre=null; + } + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public int getEdad() { + return edad; + } + + public void setEdad(int edad) { + this.edad = edad; + } +}