Java - Ejercicios resueltos de ficheros serializacion

 
Vista:

Ejercicios resueltos de ficheros serializacion

Publicado por burlon (14 intervenciones) el 08/06/2015 22:23:02
Realiza un programa en JAVA en el que le pidas al usuario las notas de las 6 asignaturas del Ciclo de DAM y las guarde
en un fichero. Posteriormente leerá el fichero y te calculará la nota media del curso.
Nota 1: Cada una de las asignaturas serán un objeto que se encuentran en un array de 6 posiciones, y cuyos atributos serán el nombre y la nota.
Nota 2: Con el constructor podrás asignar directamente el nombre de la asignatura al crear el objeto. En cambio, el atributo nota, será el usuario quien lo introduzca mediante un método que controle que la nota tenga un valor entre 0 y 10.
Ejemplo de ejecución:
105
Por favor, introduzca la nota de Programación: 6,5
Introduzca la nota de Lenguajes de Marcas: 7,5
Introduzca la nota de Bases de Datos: 7,5
Introduzca la nota de Entornos de Desarrollo: 8
Introduzca la nota de Sistemas Informáticos: 6,5
Por último, introduzca la nota de FOL: 6
***** Notas almacenadas en el array *****
……… Volcando el array al fichero ………
***** Volcado finalizado con éxito *****
………Leyendo el fichero y calculando media………
Su nota media del curso es de: 7

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
clase Curso.java
 
public class Curso implements Serializable{
 
    private String nombre;
    private double nota;
 
    public Curso(String nombre) {
        this.nombre = nombre;
        establecerNota();
    }
 
    public String getNombre() {
        return nombre;
    }
 
    public double getNota() {
        return nota;
    }
    public  void  establecerNota() {
        Scanner teclado = new Scanner(System.in);
 
        do {
            System.out.println("Introduce la nota de " + getNombre() + " : ");
            nota = teclado.nextDouble();
 
            if ((nota < 0) || (nota > 10)) {
                System.out.println("nota no valida");
 
            }
 
        } while ((nota < 0) || (nota > 10));
 
    }
}
 
Clase serializable.java
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
 
 
public class Serializable {
 
    public static void crearFichero(Curso[] asignatura) {
        FileOutputStream fos = null;
        try {
            File fichero = new File("fichero.obj");
            fos = new FileOutputStream(fichero);
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            escribirFichero(oos, asignatura);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            try {
                if (fos != null) {
                    fos.close();
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
    }
 
    public static void escribirFichero(ObjectOutputStream oos, Curso[] asignatura) throws Exception {
 
        System.out.println("……… Volcando el array al fichero ………");
 
        for (int i = 0; i < asignatura.length; i++) {
            oos.writeObject(asignatura[i]);
        }
 
        System.out.println("***** Volcado finalizado con éxito *****");
 
    }
 
    public static void rellenarArray(Curso[] asignatura) {
 
        asignatura[0] = new Curso("Programacion");
        asignatura[1] = new Curso("Lenguajes de Marcas");
        asignatura[2] = new Curso("Bases de Datos");
        asignatura[3] = new Curso("Entornos de Desarrollo");
        asignatura[4] = new Curso("Sistemas Informáticos");
        asignatura[5] = new Curso("Formación y Orientación Laboral");
 
        System.out.println("***** Notas almacenadas en el array *****");
 
    }
 
    public static void leerFichero() {
        FileInputStream fis = null;
        try {
            File fichero = new File("fichero.obj");
            fis = new FileInputStream(fichero);
            ObjectInputStream ois = new ObjectInputStream(fis);
            mostrarFichero(ois);
 
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            try {
                if (fis != null) {
                    fis.close();
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
    }
 
    public static void leerFicheroParaCalcular() {
        FileInputStream fis = null;
        try {
            File fichero = new File("fichero.obj");
            fis = new FileInputStream(fichero);
            ObjectInputStream ois = new ObjectInputStream(fis);
 
            calcularMedia(ois);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            try {
                if (fis != null) {
                    fis.close();
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
    }
 
    public static void mostrarFichero(ObjectInputStream ois) throws Exception {
        Curso asignatura;
        System.out.println(" ...Leyendo el fichero.....");
        //for (int i=0; i<6;i++) {
        while (true) {
            asignatura = (Curso) ois.readObject();
 
            System.out.println(asignatura.getNombre());
            System.out.println(asignatura.getNota());
 
        }
 
    }
 
    public static void calcularMedia(ObjectInputStream ois) throws Exception {
        Curso asignatura;
        double media = 0, mediaFinal;
        System.out.println(" ...calculando media....");
        try {
            while (true) {
                asignatura = (Curso) ois.readObject();
                media = media + asignatura.getNota();
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        mediaFinal = media / 6;
        System.out.println("Su nota media del curso es de: " + mediaFinal);
 
    }
 
    public static void main(String[] args) {
        Curso[] asignatura = new Curso[6];
        rellenarArray(asignatura);
        crearFichero(asignatura);
        leerFichero();
        leerFicheroParaCalcular();
    }
 
}


Realiza un programa en JAVA en el que le pidas al usuario notas de las asignaturas del Ciclo de DAM y las guarde en un fichero. Posteriormente leerá el fichero y te calculará la nota media del curso.
Nota 1: Cada una de las asignaturas serán un objeto que se encuentran en una lista, y cuyos atributos serán el nombre y la nota.
Nota 2: El usuario establecerá el nombre de la asignatura mediante un método. El atributo nota, también será el usuario quien lo introduzca mediante un método que controle que la nota tenga un valor entre 0 y 10.
Ejemplo de ejecución:
106
Por favor, introduzca el nombre de la asignatura: Programación.
Introduzca la nota de Programación: 8,5
¿Desea introducir otra asignatura? SI
Por favor, introduzca el nombre de la asignatura: FOL.
Introduzca la nota de Lenguajes de Marcas: 9
¿Desea introducir otra asignatura? SI
Por favor, introduzca el nombre de la asignatura: Bases de Datos
Introduzca la nota de Bases de Datos: 8
¿Desea introducir otra asignatura? NO
***** Notas almacenadas en la lista *****
……………… Volcando la lista al fichero …………….
***** Volcado finalizado con éxito *****
………Leyendo el fichero y calculando media…………….
Su nota media del curso es de: 8,5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Curso.java
 
public class Curso implements Serializable{
    private String nombre;
    private double nota;
 
    public Curso() {
        establecerNombre();
        establecerNota();
    }
 
    public String getNombre() {
        return nombre;
    }
 
    public double getNota() {
        return nota;
    }
    public  void  establecerNombre() {
        Scanner teclado = new Scanner(System.in);
 
 
            System.out.print("Por favor, introduzca el nombre de la asignatura:");
            nombre = teclado.nextLine();
 
 
 
    }
    public  void  establecerNota() {
        Scanner teclado = new Scanner(System.in);
 
        do {
            System.out.println("Introduce la nota de " + getNombre() + " : ");
            nota = teclado.nextDouble();
 
            if ((nota < 0) || (nota > 10)) {
                System.out.println("nota no valida");
 
            }
 
        } while ((nota < 0) || (nota > 10));
 
    }
}

Serielizable.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
public class Serielezable {
 
    public static void aniadirObjetosALista(ArrayList<Curso> Asignatura) {
        Scanner teclado = new Scanner(System.in);
        String respuesta = "no";
        do {
            Asignatura.add(new Curso());
 
 
            System.out.println("¿Desea introducir otra asignatura?");
            respuesta = teclado.nextLine();
        } while (respuesta.equalsIgnoreCase("Si"));
 
        System.out.println("***** Notas almacenadas en la lista *****");
    }
 
    public static void crearFichero(ArrayList<Curso> Asignatura) {
        FileOutputStream fos = null;
        try {
            File fichero = new File("fichero.obj");
            fos = new FileOutputStream(fichero);
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            escribirFichero(oos, Asignatura);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            try {
                if (fos != null) {
                    fos.close();
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
    }
 
    public static void escribirFichero(ObjectOutputStream oos,  ArrayList<Curso> Asignatura)throws Exception{
 
        System.out.println(".................. Volcando la lista al fichero ................");
 
        for (int i = 0; i < Asignatura.size(); i++) {
            oos.writeObject(Asignatura.get(i));
        }
 
        System.out.println("***** Volcado finalizado con éxito *****");
 
    }
    public static void leerFichero() {
        FileInputStream fis = null;
        try {
            File fichero = new File("fichero.obj");
            fis = new FileInputStream(fichero);
            ObjectInputStream ois = new ObjectInputStream(fis);
            mostrarFichero(ois);
 
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            try {
                if (fis != null) {
                    fis.close();
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
    }
    public static void mostrarFichero(ObjectInputStream ois) throws Exception {
        Curso asignatura;
        System.out.println(" ...Leyendo el fichero.....");
        while (true) {
            asignatura = (Curso) ois.readObject();
            System.out.println("Asignatura: " + asignatura.getNombre());
            System.out.println("Nota: " + asignatura.getNota());
 
        }
 
    }
    public static void leerFicheroParaCalcular() {
        FileInputStream fis = null;
        try {
            File fichero = new File("fichero.obj");
            fis = new FileInputStream(fichero);
            ObjectInputStream ois = new ObjectInputStream(fis);
 
            calcularMedia(ois);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            try {
                if (fis != null) {
                    fis.close();
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
    }
    public static void calcularMedia(ObjectInputStream ois) throws Exception {
        Curso asignatura;
        double media = 0, mediaFinal;
        int contador = 0;
        System.out.println(" ...calculando media....");
        try {
            while (true) {
                asignatura = (Curso) ois.readObject();
                media = media + asignatura.getNota();
                contador++;
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        mediaFinal = media / contador;
        System.out.println("Su nota media del curso es de: " + mediaFinal);
 
    }
 
    public static void main(String[] args) {
        ArrayList<Curso> Asignatura = new ArrayList();
        aniadirObjetosALista(Asignatura);
        crearFichero(Asignatura);
        leerFichero();
        leerFicheroParaCalcular();
    }
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder
sin imagen de perfil

Ejercicios resueltos de ficheros serializacion

Publicado por nuke (2 intervenciones) el 03/10/2017 13:09:02
El código esta bien aunque al final de la impresión, antes del: "calculando nota media" e inmediatamente después imprime dos null que no deberían estar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar