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:34] – [Serialización de objetos] 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 216: Línea 233:
 //Creo un documento XML y creo el nodo raiz "productos" //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 256: 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 290: 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 ===
Línea 1165: 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 1171: 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.1541518457.txt.gz · Última modificación: 2024/09/16 16:05 (editor externo)