Herramientas de usuario

Herramientas del sitio


apuntes:ficheros

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
apuntes:ficheros [2018/11/06 15:26] – [Ficheros XML] fernandoapuntes:ficheros [2024/09/16 16:03] (actual) – editor externo 127.0.0.1
Línea 60: Línea 60:
  
 <code java> <code java>
-FileWriter fichero = null; 
 PrintWriter escritor = null; PrintWriter escritor = null;
  
-try { + 
-  fichero = new FileWriter("archivo.txt"); +escritor = new PrintWriter("archivo.txt") ; 
-  escritor = new PrintWriter(fichero) ; +escritor.println("Esto es una linea del fichero"); 
-  escritor.println("Esto es una linea del fichero"); +escritor.close();
-} catch (IOException ioe) { +
-  ioe.printStackTrace() ; +
-} finally { +
-if (fichero != null) +
-  try { +
-    fichero.close(); +
-  } catch (IOException ioe) { . . . } +
-}+
 </code> </code>
  
Línea 83: Línea 74:
 Scanner lector = null; Scanner lector = null;
  
-try { +lector = new Scanner(fichero); 
-   lector = new Scanner(fichero); +while(lector.hasNextLine()){ 
-   while(lector.hasNextLine()){ +   System.out.println(lector.nextLine());
-      System.out.println(lector.nextLine()); +
-   } +
-} catch (FileNotFoundException e) { +
-   e.printStackTrace(); +
-}finally { +
-   if(lector != null) { +
-      lector.close(); +
-   }+
 } }
 +lector.close();
 </code> </code>
 +
 +=== Otras formas de escribir/leer en ficheros de texto ===
 +
 +  * Escribir Con FileWriter 
 +<code java>
 +FileWriter writer = new FileWriter("fichero.txt");
 +writer.write("Texto a fichero \n");
 +writer.close();
 +
 +
 +//Si quiero que no me sobrescriba el fichero destino
 +FileWriter writer = new FileWriter("fichero.txt", true);
 +
 +</code>
 +
 +  * Con BufferedWriter / Reader
 +<code java>
 +BufferedWriter writer = new BufferedWriter("fichero.txt");
 +writer.write("texto a escribir\n");
 +writer.close();
 +
 +
 +BufferedReader reader = new BufferedReader("fichero.txt");
 +cadena = reader.readLine(); //Debo leer antes porque igual no hay lineas
 +
 +//Mientras haya lineas para leer (no devuelva null)
 +while( cadena != null ){
 +   System.out.println(cadena);
 +   cadena = reader.readline();
 +}
 +reader.close();
 +</code>
 +
  
 ==== Ficheros de configuración ==== ==== Ficheros de configuración ====
Línea 214: Línea 231:
 DOMImplementation dom = builder.getDOMImplementation(); DOMImplementation dom = builder.getDOMImplementation();
  
 +//Creo un documento XML y creo el nodo raiz "productos"
 Document documento = dom.createDocument(null, "xml", null); Document documento = dom.createDocument(null, "xml", null);
-Element raiz = document.createElement("productos");+Element raiz = documento.createElement("productos");
 documento.getDocumentElement().appendChild(raiz); documento.getDocumentElement().appendChild(raiz);
  
Línea 222: Línea 240:
 Text texto = null; Text texto = null;
  
 +//Recorro la lista de productos y creo un subnodo producto por cada elemento
 for (Producto producto : listaProductos) { for (Producto producto : listaProductos) {
   nodoProducto = documento.createElement("producto");   nodoProducto = documento.createElement("producto");
   raiz.appendChild(nodoProducto);   raiz.appendChild(nodoProducto);
 +  
 +  //Por cada dato de cada producto creo un nuevo subnodo
   nodoDatos = documento.createElement("nombre");   nodoDatos = documento.createElement("nombre");
   nodoProducto.appendChild(nodoDatos);   nodoProducto.appendChild(nodoDatos);
   texto = documento.createTextNode(producto.getNombre());   texto = documento.createTextNode(producto.getNombre());
   nodoDatos.appendChild(texto);   nodoDatos.appendChild(texto);
 +  
   nodoDatos = documento.createElement("precio");   nodoDatos = documento.createElement("precio");
   nodoProducto.appendChild(nodoDatos);   nodoProducto.appendChild(nodoDatos);
Línea 235: Línea 257:
 } }
  
 +//Finalizo el documento xml y lo guardo en un fichero de texto
 Source src = new DOMSource(documento); Source src = new DOMSource(documento);
 Result resultado = new StreamResult(new File("fichero.xml")); Result resultado = new StreamResult(new File("fichero.xml"));
Línea 250: Línea 273:
  
 //Recorro cada uno de los elementos producto para obtener sus campos //Recorro cada uno de los elementos producto para obtener sus campos
-NodeList productos = documento.getElementyByTagName("producto");+NodeList productos = documento.getElementsByTagName("producto");
 for (int i = 0; i < productos.getLength(); i++) { for (int i = 0; i < productos.getLength(); i++) {
   Node producto = productos.item( i );   Node producto = productos.item( i );
   Element elemento = ( Element ) producto;   Element elemento = ( Element ) producto;
   System.out.println(elemento.getElementsByTagName("nombre").item(0).getChildNodes().item(0).getNodeValue());   System.out.println(elemento.getElementsByTagName("nombre").item(0).getChildNodes().item(0).getNodeValue());
-  System.out.println(elemento.getElementsByTagName("precio").item(0).gethildNodes().item(0).getNodeValue());+  System.out.println(elemento.getElementsByTagName("precio").item(0).getChildNodes().item(0).getNodeValue());
 } }
  
Línea 284: Línea 307:
  
 Hay que tener en cuenta que durante el proceso de serialización, cada objeto se serializa a un fichero, por lo que si queremos almacenar todos los objetos de una aplicación, la idea más conveniente es tener todos éstos en alguna estructura compleja (y por comodidad dinámica) de forma que sea esta estructura la que serialicemos o deserialicemos para guardar o cargar los objetos de una aplicación. Estructuras como ''ArrayList'', ''Set'' ó ''HashMap'' son clases muy utilizadas para trabajar de esta manera.  Hay que tener en cuenta que durante el proceso de serialización, cada objeto se serializa a un fichero, por lo que si queremos almacenar todos los objetos de una aplicación, la idea más conveniente es tener todos éstos en alguna estructura compleja (y por comodidad dinámica) de forma que sea esta estructura la que serialicemos o deserialicemos para guardar o cargar los objetos de una aplicación. Estructuras como ''ArrayList'', ''Set'' ó ''HashMap'' son clases muy utilizadas para trabajar de esta manera. 
 +
 +===Interface Serializable===
 +Para poder guardar objetos de una clase directamente en un fichero binario, todas las clases a las que pertenecen los objetos que guarde deben implementar ''Serializable''. Esta interface no tiene métodos, por lo que no necesito sobrescribir nada al implementarla sobre una clase. La mayoría de las clases de la API de Java implementan Serializable.
 +
 +Por ejemplo, si quiero guardar una lista de productos directamente en fichero, tanto la clase ArrayList, como la clase Producto, deben ser Serializable. ArrayList ya lo es, así que debemos implementarla sobre las clases que nosotros creamos (Producto en este caso).
  
 === Serializar un objeto === === Serializar un objeto ===
  
 <code java> <code java>
-. . .+FileOutputStream flujoSalida = null;
 ObjectOutputStream serializador = null; ObjectOutputStream serializador = null;
 try { try {
-  serializador new ObjectOutputStream(new FileOutputStream("archivo.dat"));+  flujoSalida = new FileOutputStream("archivo.dat")
 +  serializador = new ObjectOutputStream(flujoSalida); 
 +   
 +  //Escribo el ArrayList completo
   serializador.writeObject(listaProductos);   serializador.writeObject(listaProductos);
 +  
 } catch (IOException ioe) {  } catch (IOException ioe) { 
   . . .   . . .
Línea 303: Línea 335:
     }     }
   }   }
-. . .+
 </code> </code>
  
Línea 309: Línea 341:
  
 <code java> <code java>
-. . . 
 List<Producto> listaProductos = null; List<Producto> listaProductos = null;
 +
 +FileInputStream flujoEntrada = null;
 ObjectInputStream deserializador = null; ObjectInputStream deserializador = null;
 +
 try { try {
-  deserializador new ObjectInputStream(new FileInputStream("archivo.dat"));+  flujoEntrada = new FileInputStream("archivo.dat")
 +  deserializador = new ObjectInputStream(flujoEntrada); 
 +   
 +  //Leo el ArrayList
   listaProductos = (ArrayList<Producto>)deserializador.readObject();   listaProductos = (ArrayList<Producto>)deserializador.readObject();
 +  
 } catch (FileNotFoundException fnfe ) { } catch (FileNotFoundException fnfe ) {
   fnfe.printStackTrace();   fnfe.printStackTrace();
Línea 329: Línea 367:
   }   }
 } }
-. . .+
 </code> </code>
  
Línea 1149: Línea 1187:
 ===== Proyectos de ejemplo ===== ===== Proyectos de ejemplo =====
  
-Los proyectos que se vayan haciendo en clase estarán disponibles en el [[https://bitbucket.org/fvaldeon/accesodatosud1/src/|repositorio de ejercicios de Bitbucket]] junto a más ejemplos.+Los proyectos de ejemplo con contenidos de esta unidad están disponibles en el [[https://bitbucket.org/fvaldeon/accesodatosud1/src/|repositorio de proyectos UD1]].
  
 Para manejaros con Git recordad que tenéis una serie de videotutoriales en la sección [[extra:referencias|Referencias]] Para manejaros con Git recordad que tenéis una serie de videotutoriales en la sección [[extra:referencias|Referencias]]
Línea 1155: Línea 1193:
 Por otra parte, para el tema de [[http://programacion.codeandcoke.com/doku.php?id=bloque4:dialogos|creación y uso de distintos cuadros de diálogo]], podeis consultar la sección de los apuntes de programación. También los apuntes sobre funcionamiento de la mayoría de [[http://programacion.codeandcoke.com/doku.php?id=bloque4:swing|componentes de las librerías de Swing]]. Por otra parte, para el tema de [[http://programacion.codeandcoke.com/doku.php?id=bloque4:dialogos|creación y uso de distintos cuadros de diálogo]], podeis consultar la sección de los apuntes de programación. También los apuntes sobre funcionamiento de la mayoría de [[http://programacion.codeandcoke.com/doku.php?id=bloque4:swing|componentes de las librerías de Swing]].
  
-También, los proyectos de ejemplo de estos apuntes están en el [[http://www.bitbucket.org/sfaci/java-ficheros|repositorio java-ficheros]] de BitBucket. Podéis acceder tanto al código como a las descargas, a continuación:+También, los proyectos de ejemplo de estos apuntes están en el [[http://www.bitbucket.org/sfaci/java-ficheros|repositorio java-ficheros]] de BitBucket del profesor Santiago Faci. Podéis acceder tanto al código como a las descargas, a continuación:
  
  
apuntes/ficheros.1541518011.txt.gz · Última modificación: 2024/09/16 16:05 (editor externo)