{"id":280,"date":"2026-10-01T17:53:01","date_gmt":"2026-10-01T17:53:01","guid":{"rendered":"https:\/\/java.nosoyia.es\/?page_id=280"},"modified":"2026-10-01T17:53:01","modified_gmt":"2026-10-01T17:53:01","slug":"archivos","status":"publish","type":"page","link":"https:\/\/java.nosoyia.es\/?page_id=280","title":{"rendered":"Archivos"},"content":{"rendered":"\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-3a88641f wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"has-background wp-block-paragraph\" style=\"background-color:#a1f6ed;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\">Correspondencia en Python &#8212;&gt;<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/python.nosoyia.es\/archivos\/\"><img loading=\"lazy\" decoding=\"async\" width=\"100\" height=\"56\" src=\"https:\/\/java.nosoyia.es\/wp-content\/uploads\/2026\/06\/Flor.jpg\" alt=\"\" class=\"wp-image-44\" title=\"Bloques en Python\"\/><\/a><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Con java, como con cualquier otro lenguaje de programaci\u00f3n, podemos crear archivos, eliminarlos, leerlos o escribir en ellos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos manipular archivos de texto con extensi\u00f3n \u00ab.txt\u00bb o archivos binarios (que pueden contener cualquier otro tipo de informaci\u00f3n).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0);color:#f5410a\" class=\"has-inline-color\">Leer archivos .txt<\/mark><\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aunque existen varias formas de hacerlo, vamos a ver como funciona la lectura completa de un archivo .txt y que el contenido del archivo se almacene en una variable String.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>import java.io.IOException;\nimport java.nio.file.Files;\nimport java.nio.file.Path;\n\npublic class Prueba3 {\n\n    public static void main(String[] args) {\n        Path fichero = Path.of(&quot;Textos\/mi_archivo.txt&quot;);\n            try{\n                String texto= Files.readString(fichero);\n                System.out.println(texto);\n            }\n            catch (IOException e){\n                System.out.println(&quot;No se puede leer el archivo.&quot;);\n            }\n        }\n}<\/code><\/pre><\/div>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism off-numbers lang-plain\"><code>Posible resultado:\n\nEste archivo de texto,\nest\u00e1 escrito a modo de ejemplo.\nSolo tiene 3 l\u00edneas.<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">En primer lugar observamos que se han importado a nuestro c\u00f3digo varias clases. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lo otro importante (en este caso) es definir la ruta del archivo como un objeto de la clase Path. Este ruta partir\u00e1 de la ra\u00edz de nuestro proyecto. Aqu\u00ed hemos creado una carpeta llamada Textos dentro de la cual se encuentra nuestro archivo .txt<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s hemos creado un bloque try \/cath, que se va a encargar de intentar leer el contenido de dicho archivo con el m\u00e9todo <strong><em><mark style=\"background-color:rgba(0, 0, 0, 0);color:#f25626\" class=\"has-inline-color\">Files.readString(objeto Path)<\/mark><\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si la lectura del fichero es correcta, su contenido se asigna con este m\u00e9todo a la variable String que hemos definido.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si no es posible localizar o leer el contenido del archivo, se ejecuta lo que se indica en la orden cath<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ee4411\" class=\"has-inline-color\">leer archivo l\u00ednea por l\u00ednea<\/mark><\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En este caso vamos a leer el contenido de un archivo l\u00ednea por l\u00ednea.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>import java.io.BufferedReader;\nimport java.io.FileReader;\nimport java.io.IOException;\n\npublic class Prueba3 {\n\n    public static void main(String[] args) {\n        int contador=0;\n        try{\n            BufferedReader lector= new BufferedReader(new FileReader(&quot;Textos\/mi_archivo.txt&quot;));\n            String linea;\n            while ((linea= lector.readLine()) !=null){\n                contador+=1;\n                System.out.println(contador+&quot; &quot;+linea);\n            }\n        }\n        catch (IOException e)\n        {\n                System.out.println(&quot;No se puede leer el archivo.&quot;);\n            }\n        }\n}<\/code><\/pre><\/div>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism off-numbers lang-plain\"><code>Posible resultado:\n\n1 Este archivo de texto,\n2 est\u00e1 escrito a modo de ejemplo.\n3 Solo tiene 3 l\u00edneas.<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Vemos que han variado las clases que se van a importar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La primera clase importante es <strong><em><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ed3d07\" class=\"has-inline-color\">BufferedReader<\/mark><\/em><\/strong>. Hemos creado un objeto de esta clase. Dicho objeto va a actuar como un buffer de entrada donde se guardar\u00e1 en un principio todo el contenido del archivo de texto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La otra clase es <strong><em><mark style=\"background-color:rgba(0, 0, 0, 0);color:#f04714\" class=\"has-inline-color\">FileReader<\/mark><\/em><\/strong> Esta clase es la que se encarga de leer el contenido del archivo .txt<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La clase <strong><em><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ec420e\" class=\"has-inline-color\">readLine()<\/mark><\/em><\/strong> se encarga de leer la primera l\u00ednea disponible en el buffer creado. Mediante un bloque while, comprobamos que la l\u00ednea no est\u00e9 vac\u00eda, en cuyo caso el contenido de readLine( ) ser\u00eda null.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La lectura de la l\u00ednea queda almacenado en la variable que hemos creado de tipo String. Tambi\u00e9n hemos creado un contador que nos vaya contando y numerando las l\u00ednea<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ee4917\" class=\"has-inline-color\">Leer archivo car\u00e1cter por car\u00e1cter<\/mark><\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un archivo tambi\u00e9n puede ser le\u00eddo car\u00e1cter por car\u00e1cter. En el siguiente c\u00f3digo leeremos el archivo de esta manera e iremos formando cadenas de 10 caracteres. <\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>import java.io.FileReader;\nimport java.io.IOException;\n\npublic class Prueba3 {\n\n\n    public static void main(String[] args) {\n        String cadena=&quot;&quot;;\n\n        try{\n            FileReader lector=new FileReader(&quot;Textos\/mi_archivo.txt&quot;);\n            int caracter;\n            int contador=0;\n            int contador_cadenas=1;\n\n            while ((caracter= lector.read()) !=-1){\n                cadena=(cadena+(char) caracter);\n                contador+=1;\n                if (contador==10){\n                    System.out.println(&quot;Cadena &quot;+contador_cadenas+&quot;: &quot;+cadena);\n                    contador=0;\n                    cadena=&quot;&quot;;\n                    contador_cadenas+=1;\n                }\n            }\n            System.out.println(&quot;Cadena &quot;+contador_cadenas+&quot;: &quot;+cadena);\n        }\n\n        catch (IOException e)\n        {\n                System.out.println(&quot;No se puede leer el archivo.&quot;);\n            }\n        }\n}<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">La instrucci\u00f3n <strong><em><mark style=\"background-color:rgba(0, 0, 0, 0);color:#e93c07\" class=\"has-inline-color\">FileReader lector=new FileReader(archivo)<\/mark><\/em><\/strong> nos facilita el buffer desde el cual se ir\u00e1n obteniendo los caracteres a demanda. Al objeto de lectura creado en este caso le damos el nombre de lector.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El m\u00e9todo <strong><em><mark style=\"background-color:rgba(0, 0, 0, 0);color:#e9400c\" class=\"has-inline-color\">lector.read( )<\/mark><\/em><\/strong> es quien le solicita al buffer que le de el siguiente caracter que tenga almacenado. Este caracter lo vamos almacenando en el objeto String al que hemos llamado cadena. Cuando llevamos 10 caracteres obtenidos, imprimimos la cadena y reiniciamos los valores para obtener otra cadena.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Debemos de tener en cuenta que el caracter \u00ab\/n\u00bb salto de l\u00ednea se cuenta como uno m\u00e1s. Por eso veremos que hay cadenas que est\u00e1n escritas en dos l\u00edneas.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism off-numbers lang-plain\"><code>Resultado:\n\nCadena 1: Este archi\nCadena 2: vo de text\nCadena 3: o,\nest\u00e1 es\nCadena 4: crito a mo\nCadena 5: do de ejem\nCadena 6: plo.\nSolo \nCadena 7: tiene 3 l\u00ed\nCadena 8: neas.<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0);color:#e43e0c\" class=\"has-inline-color\">Creaci\u00f3n y escritura en archivos.<\/mark><\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vemos a continuaci\u00f3n un ejemplo de c\u00f3digo que crea un archivo .txt en caso de que no exista. En el caso que mostramos debemos de tener cuidado, ya que si el archivo existe, lo sobreescribe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A continuaci\u00f3n escribir\u00e1 en \u00e9l dos cadenas String.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>import java.io.FileWriter;\nimport java.io.IOException;\n\npublic class Prueba3 {\n    public static void main(String[] args) {\n\n        String texto_1 = &quot;Me gusta programar en Java.\\n&quot;;\n        String texto_2 = &quot;Me divierte mucho y aprendo.\\n&quot;;\n\n        try (FileWriter fichero = new FileWriter(&quot;Textos\/mi_archivo_3.txt&quot;, false)){\n\n            fichero.write(texto_1);\n            fichero.write(texto_2);\n\n        }\n        catch (IOException e) {\n            System.out.println(&quot;Error al escribir el archivo: &quot; + e.getMessage());\n        }\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">En primer lugar creamos un <strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">objeto FileWriter<\/mark><\/em><\/strong>, donde podremos a\u00f1adir nuestros String<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Prestamos especial atenci\u00f3n al par\u00e1metro \u00abfalse\u00bb a\u00f1adido al objeto cuando lo creamos. El valor de este par\u00e1metro (false) indica que se <strong><em><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ee4917\" class=\"has-inline-color\">va a  sobreescribir un fichero anterior si ya existe con el mismo nombre.<\/mark><\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">Muy importante tambi\u00e9n es el lugar que ocupa la creaci\u00f3n del objeto<\/mark><\/em><\/strong> en referencia a la instrucci\u00f3n \u00abtry\u00bb. Estamos creando el fichero antes del bloque de c\u00f3digo (antes de las llaves), pero justo despu\u00e9s de la palabra \u00abtry\u00bb. Y adem\u00e1s lo encerramos entre par\u00e9ntesis. Esto dar\u00e1 lugar a que el fichero se cierre despu\u00e9s de ejecutar el c\u00f3digo, en caso contrario quedar\u00eda abierto y sin escribir nuestros String en \u00e9l.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En todos los casos, la ruta del archivo partir\u00e1 de la carpeta ra\u00edz de nuestro proyecto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">A\u00f1adir contenido a un archivo.<\/mark><\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si en lugar de darle el valor \u00abfalse\u00bb al par\u00e1metro indicado anteriormente le damos valor <strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">\u00abtrue\u00bb<\/mark><\/em><\/strong> conseguimos dos cosas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si el archivo no existe, ser\u00e1 creado. A continuaci\u00f3n se a\u00f1adir\u00e1 el contenido que se se indique.<\/li>\n\n\n\n<li>Si el archivo ya existe, el archivo se abre y el contenido que se indique <strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">se a\u00f1adir\u00e1 a continuaci\u00f3n del contenido que ya ten\u00eda el archivo anteriormente.<\/mark><\/em><\/strong>  <\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">Archivos JSON<\/mark><\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un tipo particular de archivos que es muy \u00fatil, son los archivos con formato<br>json. Cuando el usuario necesita guardar una informaci\u00f3n sencilla, los archivos txt pueden ser suficientes. En cambio cuando se debe de guardar una informaci\u00f3n m\u00e1s compleja (un ArrayList, objetos de una clase, un HashSet, un ArrayList de HashMap&#8230;) entonces podemos acudir a los archivos json, que nos facilitan mucho la tarea.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La gran ventaja de estos archivos, es que las estructuras de datos que guardemos en ellos, ser\u00e1n recuperadas y reutilizadas en nuestro c\u00f3digo de una forma muy sencilla.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Otra ventaja m\u00e1s es que pueden ser utilizados en otros lenguajes de programaci\u00f3n, o aplicaciones que los acepten. Su uso nos puede facilitar la vida en mucho de los programas que vayamos a crear.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sin embargo Java no tiene una librer\u00eda propia que maneje este tipo de archivos. Existen varias de ellas, pero todas requieren su previa importaci\u00f3n. Para poderlas incorporar a nuestro proyecto deberemos de seguir las instrucciones que procedan en cada caso para su instalaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En el siguiente ejemplo, se ha seguido la biblioteca Gson. El c\u00f3digo consiste en un elemento base que ser\u00e1 un ArrayList de alumnos. Los elementos del ArrayList ser\u00e1n cada uno un HashMap que va a contener informaci\u00f3n relativa a un alumno. Este ArrayList se guardar\u00e1 al finalizar el programa en un archivo JSON que ser\u00e1 recuperado la pr\u00f3xima vez que se ejecute el programa para recuperar a su vez los alumnos ya anotados.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>import com.google.gson.Gson;\nimport java.io.File;\nimport java.io.FileReader;\nimport java.io.FileWriter;\nimport java.io.IOException;\nimport java.util.*;\n\npublic class Prueba3 {\n    public static void main(String[] args) {\n\n        File mi_archivo = new File(&quot;datos_alumno.json&quot;);\n        ArrayList&lt;HashMap&lt;String, String&gt;&gt; lista_alumnos = new ArrayList&lt;&gt;();\n        HashMap&lt;String, String&gt; alumnos = new HashMap&lt;&gt;();\n\n        String nombre=&quot;&quot;;\n        String apellidos=&quot;&quot;;\n        String edad=&quot;&quot;;\n        String curso=&quot;&quot;;\n        Scanner mi_scanner = new Scanner(System.in);\n\n        Gson gson = new Gson();\n\n        if (mi_archivo.exists()){\n            try (FileReader lector = new FileReader(mi_archivo)) {\n                lista_alumnos=gson.fromJson(lector, ArrayList.class);\n\n            } catch (IOException e) {\n                e.printStackTrace();\n            }\n        }\n\n        while (!nombre.equalsIgnoreCase(&quot;SALIR&quot;)){\n            System.out.print(&quot;Nombre alumno: &quot;);\n            nombre=mi_scanner.nextLine();\n            if (!nombre.equalsIgnoreCase(&quot;SALIR&quot;)){\n                alumnos.put(&quot;Nombre&quot;, nombre );\n                System.out.print(&quot;Apellidos: &quot;);\n                apellidos=mi_scanner.nextLine();\n                alumnos.put(&quot;Apellidos&quot;, apellidos);\n                System.out.print(&quot;Edad: &quot;);\n                edad=mi_scanner.nextLine();\n                alumnos.put(&quot;Edad&quot;, edad);\n                System.out.print(&quot;Curso: &quot;);\n                curso=mi_scanner.nextLine();\n                alumnos.put(&quot;Curso&quot;, curso);\n\n                lista_alumnos.add(new HashMap&lt;&gt;(alumnos));\n                alumnos.clear();\n            }\n        }\n\n        try(FileWriter escritor = new FileWriter(mi_archivo)){\n            gson.toJson(lista_alumnos, escritor);\n        }\n        catch (IOException e) {\n            e.printStackTrace();\n        }\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Al ejecutar el c\u00f3digo se nos va pidiendo datos de cada alumno. Estos datos se guardar\u00e1n en el ArrayList que posteriormente ser\u00e1 guardado en el archivo JSON para recuperarlo en otra ejecuci\u00f3n del c\u00f3digo posterior.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>En primer lugar hemos dado nombre a nuestro archivo:                                   <strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">File mi_archivo = new File(\u00abdatos_alumno.json\u00bb);<\/mark><\/em><\/strong><br><\/li>\n\n\n\n<li>Con la siguiente instrucci\u00f3n indicamos que vamos a crear un ArrayList que va a contener HashMap como elementos.<br><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">ArrayList&lt;HashMap&lt;String, String&gt;&gt; lista_alumnos = new ArrayList&lt;&gt;();<\/mark><\/em><\/strong><br><\/li>\n\n\n\n<li><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">Gson gson = new Gson();<\/mark><\/em><\/strong> Aqu\u00ed estamos creando un objeto Gson. Hemos elegido la clase Gson, que hemos tenido que crear en nuestro proyecto Java como una clase externa, ya que no la tiene incluida como nativa por defecto. El procedimiento para crear la clase externa que gestione JSON es diferente seg\u00fan el paquete externo que vayamos a utilizar y seg\u00fan el IDE usado.<br><\/li>\n\n\n\n<li>Con el siguiente bloque comprobamos si existe nuestro archivo JSON ya en nuestro proyecto. Si ya existe, lo abrimos para lectura y cargamos su contenido en el ArrayList.<br><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">lista_alumnos=gson.fromJson(lector, ArrayList.class);<\/mark><\/em><\/strong><br><\/li>\n\n\n\n<li>A continuaci\u00f3n pedimos datos para un nuevo alumno que se crear\u00e1 en un HashMap. Atenci\u00f3n aqu\u00ed a la instrucci\u00f3n:<br><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">(!nombre.equalsIgnoreCase(\u00abSALIR\u00bb))<\/mark><\/em><\/strong><br>Ser\u00eda totalmente err\u00f3neo poner: while (nombre!=\u00bbSALIR\u00bb) ya que para comparar si dos String son iguales, debemos de utilizar la instrucci\u00f3n anterior. No vale la comparaci\u00f3n habitual para datos tipo \u00abint\u00bb o cualquier otro, sino que tenemos que utilizar los m\u00e9todos que tiene la clase String para comparar. Esta instrucci\u00f3n nos permite seguir introduciendo alumnos hasta que entremos la palabra \u00absalir\u00bb. Cada nuevo alumno es a\u00f1adido al ArrayList y continuaci\u00f3n el HashMap queda borrado para otro.<br><\/li>\n\n\n\n<li>Ya solo nos queda al salir del programa, escribir en el archivo JSON el contenido del ArrayList para una nueva ejecuci\u00f3n posterior del c\u00f3digo, cuando ser\u00e1 recuperado.<br><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">(FileWriter escritor = new FileWriter(mi_archivo)<\/mark><\/em><\/strong> abre el archivo JSON para escibir en \u00e9l.<br><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">gson.toJson(lista_alumnos, escritor);<\/mark><\/em><\/strong> Escribe en el archivo el contenido del ArrayList.<br><br><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">A continuaci\u00f3n veremos un ejemplo de c\u00f3digo que lee y escribe en un archivo JSON un ArrayList, que va a contener objetos de una determinada clase. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En realidad un archivo JSON lo que almacena es un ArrayList de HahMap, que es lo que luego nos va a facilitar. Por lo tanto, si lo que queremos guardar son objetos de clases, debemos de indicar al c\u00f3digo que lo que hay dentro del ArrayList no son HashMap sino objetos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En primer lugar tenemos el c\u00f3digo de la clase:<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>import java.util.ArrayList;\n\npublic class Alumno {\n    public static int contador ;\n    private String nombre;\n    private String apellidos;\n    private String edad;\n    private String curso;\n    private String registro;\n\n    public Alumno(String nombre, String apellidos, String edad, String curso) {\n        this.nombre = nombre;\n        this.apellidos=apellidos;\n        this.edad = edad;\n        this.curso= curso;\n        contador+=1;\n        this.registro=String.format(&quot;%05d&quot;, contador);\n    }\n    public static void imprimir_todos(ArrayList listado){\n\n        if (!listado.isEmpty()){\n            System.out.println(&quot;Lista alumnos actualizada:\\n&quot;);\n            for (int k=0; k&lt;listado.size(); k++){\n                System.out.println(listado.get(0));\n            }\n        }\n    }\n\n    @Override\n    public String toString()\n    {\n        String cadena=(&quot;Registro alumnos: &quot;+registro+&quot;.&quot;+&quot;\\n&quot;+\n                       &quot;Nombre: &quot;+nombre+&quot;.&quot;+&quot;\\n&quot;+\n                       &quot;Apellidos: &quot;+apellidos+&quot;.&quot;+&quot;\\n&quot;+\n                       &quot;Edad: &quot;+edad+&quot;.&quot;+&quot;\\n&quot;+\n                       &quot;Curso: &quot;+curso+&quot;.&quot;+&quot;\\n&quot;);\n        return cadena;\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Esta es una clase sencilla donde hemos a\u00f1adido un atributo contador que nos servir\u00e1 para a\u00f1adir a cada alumno su n\u00famero de registro.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hemos a\u00f1adido un m\u00e9todo a trav\u00e9s del cual podemos mostrar en pantalla los datos de todos los alumnos que tengamos en ese momento.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A continuaci\u00f3n el c\u00f3digo que nos va a permitir guardar los objetos de la clase en un fichero JSON:<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>import com.google.gson.Gson;\nimport com.google.gson.reflect.TypeToken;\n\nimport java.io.File;\nimport java.io.FileReader;\nimport java.io.FileWriter;\nimport java.io.IOException;\nimport java.lang.reflect.Type;\nimport java.util.*;\n\npublic class Prueba3 {\n    public static void main(String[] args) {\n\n        File mi_archivo = new File(&quot;alumnos_clase.json&quot;);\n        ArrayList&lt;Alumno&gt; lista_alumnos = new ArrayList&lt;&gt;();\n\n        String nombre=&quot;&quot;;\n        String apellidos=&quot;&quot;;\n        String edad=&quot;&quot;;\n        String curso=&quot;&quot;;\n        Scanner mi_scanner = new Scanner(System.in);\n\n        Gson gson = new Gson();\n\n        if (mi_archivo.exists()){\n            try (FileReader lector = new FileReader(mi_archivo)) {\n                Type tipoLista = new TypeToken&lt;ArrayList&lt;Alumno&gt;&gt;() {}.getType();\n                lista_alumnos=gson.fromJson(lector, tipoLista);\n                Alumno.contador=lista_alumnos.size();\n\n            } catch (IOException e) {\n                e.printStackTrace();\n            }\n        }\n\n        Alumno.imprimir_todos(lista_alumnos);\n\n        while (!nombre.equalsIgnoreCase(&quot;SALIR&quot;)){\n            System.out.print(&quot;(Para salir nombre=salir). Nombre alumno: &quot;);\n            nombre=mi_scanner.nextLine();\n            if (!nombre.equalsIgnoreCase(&quot;SALIR&quot;)){\n                System.out.print(&quot;Apellidos: &quot;);\n                apellidos=mi_scanner.nextLine();\n                System.out.print(&quot;Edad: &quot;);\n                edad=mi_scanner.nextLine();\n                System.out.print(&quot;Curso: &quot;);\n                curso=mi_scanner.nextLine();\n\n                lista_alumnos.add(new Alumno(nombre, apellidos,edad,curso));\n            }\n        }\n\n        try(FileWriter escritor = new FileWriter(mi_archivo)){\n            gson.toJson(lista_alumnos, escritor);\n        }\n        catch (IOException e) {\n            e.printStackTrace();\n        }\n\n        Alumno.imprimir_todos(lista_alumnos);\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Este c\u00f3digo es muy parecido al mostrado en el ejercicio anterior con las siguientes instrucciones en particular:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">ArrayList lista_alumnos = new ArrayList&lt;&gt;();<\/mark><\/em><\/strong> Creamos el ArrayList cuyo contenido ser\u00e1 la lista de alumnos existentes.<\/li>\n\n\n\n<li><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">Type tipoLista = new TypeToken&lt;ArrayList&lt;Alumno&gt;&gt;() {}.getType();<\/mark><\/em><\/strong> Esta es la instrucci\u00f3n m\u00e1s importante. Nos crea un objeto ArrayList cuyo contenido va a ser objetos de la clase Alumno.<\/li>\n\n\n\n<li><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">lista_alumnos=gson.fromJson(lector, tipoLista);<\/mark><\/em><\/strong> Nos lee el archivo JSON y guarda en lista_alumnos su contenido.<\/li>\n\n\n\n<li><strong><em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-3-color\">gson.toJson(lista_alumnos, escritor);<\/mark><\/em><\/strong> Escribe en el archivo JSON el contenido del ArrayList.<\/li>\n<\/ul>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism off-numbers lang-plain\"><code>Posible resultado en una primera ejecuci\u00f3n del c\u00f3digo:\n\n(Para salir nombre=salir). Nombre alumno: Eduardo\nApellidos: Pizarro P\u00e9rez\nEdad: 20\nCurso: 2\n(Para salir nombre=salir). Nombre alumno: Javier\nApellidos: Garc\u00eda Picapiedra\nEdad: 21\nCurso: 2\n(Para salir nombre=salir). Nombre alumno: Elisa\nApellidos: Ruiz Pino\nEdad: 19\nCurso: 1\n(Para salir nombre=salir). Nombre alumno: salir\nLista alumnos actualizada:\n\nRegistro alumnos: 00001.\nNombre: Eduardo.\nApellidos: Pizarro P\u00e9rez.\nEdad: 20.\nCurso: 2.\n\nRegistro alumnos: 00002.\nNombre: Javier.\nApellidos: Garc\u00eda Picapiedra.\nEdad: 21.\nCurso: 2.\n\nRegistro alumnos: 00003.\nNombre: Elisa.\nApellidos: Ruiz Pino.\nEdad: 19.\nCurso: 1.<\/code><\/pre><\/div>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism off-numbers lang-plain\"><code>Posible resultado en una segunda ejecuci\u00f3n del c\u00f3digo:\n\nLista alumnos actualizada:\n\nRegistro alumnos: 00001.\nNombre: Eduardo.\nApellidos: Pizarro P\u00e9rez.\nEdad: 20.\nCurso: 2.\n\nRegistro alumnos: 00002.\nNombre: Javier.\nApellidos: Garc\u00eda Picapiedra.\nEdad: 21.\nCurso: 2.\n\nRegistro alumnos: 00003.\nNombre: Elisa.\nApellidos: Ruiz Pino.\nEdad: 19.\nCurso: 1.\n\n(Para salir nombre=salir). Nombre alumno: Ana\nApellidos: Casillas Oca\nEdad: 23\nCurso: 2\n(Para salir nombre=salir). Nombre alumno: Carlos\nApellidos: Messi Ronaldo\nEdad: 22\nCurso: 3\n(Para salir nombre=salir). Nombre alumno: salir\nLista alumnos actualizada:\n\nRegistro alumnos: 00001.\nNombre: Eduardo.\nApellidos: Pizarro P\u00e9rez.\nEdad: 20.\nCurso: 2.\n\nRegistro alumnos: 00002.\nNombre: Javier.\nApellidos: Garc\u00eda Picapiedra.\nEdad: 21.\nCurso: 2.\n\nRegistro alumnos: 00003.\nNombre: Elisa.\nApellidos: Ruiz Pino.\nEdad: 19.\nCurso: 1.\n\nRegistro alumnos: 00004.\nNombre: Ana.\nApellidos: Casillas Oca.\nEdad: 23.\nCurso: 2.\n\nRegistro alumnos: 00005.\nNombre: Carlos.\nApellidos: Messi Ronaldo.\nEdad: 22.\nCurso: 3.<\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-table tabla-colores has-large-font-size\"><table class=\"has-fixed-layout\"><tbody><tr><td><a href=\"https:\/\/java.nosoyia.es\/\">Inicio<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=52\">Comandos Java<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=30\" data-type=\"link\" data-id=\"https:\/\/java.nosoyia.es\/?page_id=30\">Bloques de c\u00f3digo.<\/a><\/td><\/tr><tr><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=34\" data-type=\"link\" data-id=\"https:\/\/java.nosoyia.es\/?page_id=34\">Comentar c\u00f3digo<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=18\" data-type=\"link\" data-id=\"https:\/\/java.nosoyia.es\/?page_id=18\">System.out.print<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=71\" data-type=\"page\" data-id=\"71\">Scanner (System.in)<\/a><\/td><\/tr><tr><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=81\">Captura de errores<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=91\">String<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=114\">Datos  Num\u00e9ricos<\/a><\/td><\/tr><tr><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=124\">Elementos aleatorios<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=136\">Datos Fecha\/hora<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=150\">Constantes<\/a><\/td><\/tr><tr><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=157\">Bucles for<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=167\">Bucles while<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=177\">Bloque if<\/a><\/td><\/tr><tr><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=190\">Arrays<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=199\">ArrayList<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=227\">switch case<\/a><\/td><\/tr><tr><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=236\">HashSet<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=250\">HashMap<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=261\">M\u00e9todos.<\/a><\/td><\/tr><tr><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=270\">Clases<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=280\">Archivos<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=299\" data-type=\"page\" data-id=\"270\">Entorno gr\u00e1fico Swing<\/a><\/td><\/tr><tr><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=307\">JFrame (Ventanas)<\/a><\/td><td><a href=\"https:\/\/java.nosoyia.es\/?page_id=321\">Componentes b\u00e1sicos.<\/a><\/td><td><\/td><\/tr><\/tbody><\/table><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Correspondencia en Python &#8212;&gt; Con java, como con cualquier otro lenguaje de programaci\u00f3n, podemos crear archivos, eliminarlos, leerlos o escribir en ellos. Podemos manipular archivos de texto con extensi\u00f3n \u00ab.txt\u00bb o archivos binarios (que pueden contener cualquier otro tipo de informaci\u00f3n). Leer archivos .txt Aunque existen varias formas de hacerlo, vamos a ver como funciona [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-280","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/java.nosoyia.es\/index.php?rest_route=\/wp\/v2\/pages\/280","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/java.nosoyia.es\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/java.nosoyia.es\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/java.nosoyia.es\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/java.nosoyia.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=280"}],"version-history":[{"count":9,"href":"https:\/\/java.nosoyia.es\/index.php?rest_route=\/wp\/v2\/pages\/280\/revisions"}],"predecessor-version":[{"id":292,"href":"https:\/\/java.nosoyia.es\/index.php?rest_route=\/wp\/v2\/pages\/280\/revisions\/292"}],"wp:attachment":[{"href":"https:\/\/java.nosoyia.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=280"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}