Java - problema con ficheros

 
Vista:
sin imagen de perfil

problema con ficheros

Publicado por Esteban (1 intervención) el 14/12/2017 09:53:35
Hola buenas, tengo un programa realizado y me piden que lo cambie para que nos haga lo siguiente:



El gobierno de Estados Unidos publica la información histórica de producción y consumo de energía
eléctrica cada mes desde 1973 hasta la actualidad. Dicha información se os proporciona en un fichero de
texto (consumos.txt) en el que cada línea del fichero contiene la siguiente información, separada por
espacios.
• Año
• Mes
• Generación por plantas de energía (Electricity Net Generation, Electric Power Sector)
• Generación por industrias (Electricity Net Generation, Industrial Sector)
• Importaciones de electricidad (Electricity Imports)
• Exportaciones de electricidad (Electricity Exports)
• Importaciones netas de electricidad (Electricity Net Imports)
• Uso de electricidad (Electricity End Use, Total)
Se quiere modificar el programa desarrollado en la Práctica 8 para que en vez de tener que introducir los
datos eléctricos a mano (operación 1), el programa lea los datos necesarios de todos los meses disponibles
en este fichero al iniciarse la aplicación. Por tanto, deberás añadir una operación que sirva para cargar los
datos eléctricos en un vector leyéndolos de un fichero de texto (consumos.txt). Esta operación sustituirá a la
operación 1 de la Práctica 8, y ya no será necesario comprobar, para cada mes introducido, que es
consecutivo al anterior. De igual forma, ya no hay un límite de 18 meses, sino que el número de meses
vendrá dado por el número de líneas del fichero. Ten en cuenta el fichero tiene más campos que los
introducidos por teclado en la práctica 8. Estos nuevos campos tienen que leerse y almacenarse de la forma
apropiada.
Introducimos además tres nuevas operaciones, que se describen a continuación, de forma que el menú
queda:
1- Cargar datos de fichero (consumos.txt).
2- Mostrar por pantalla la información de todos los meses almacenados.
3- Mostrar por pantalla la información de todos los meses cuya producción de energía eléctrica esté
en el rango de dos valores indicado por el usuario.
4- Modificar los datos (producción plantas, importaciones o exportaciones) de un mes y año.
5- Guardar datos en un fichero.
Descripción de las nuevas operaciones:
Mostrar por pantalla la información de todos los meses cuya producción de energía eléctrica esté en el rango
de dos valores indicado por el usuario: Se solicitará al usuario el mes y el año, y se mostrará por pantalla un
listado con toda la información de cada mes cuya producción esté entre esos dos valores. La lista estará
ordenada por año y mes. La información se mostrará con el siguiente formato:
• Año: 1999, Mes: enero, Prod plantas: 1000, Prod industrias: 100, Importaciones: 50,
Exportaciones: 13, Imp Netas: 60, Uso 500.
Modificar los datos de un mes y año: Se pedirá un mes y año y la información necesaria para añadir los
datos a un mes. Esta información deberá reemplazar a la del año y mes correspondiente
Guardar datos. Solicita al usuario el nombre de un fichero y crea dicho fichero con la información contenida
en la aplicación. Escribirá, en cada línea del fichero, la información correspondiente a un mes y año. La
información debe escribirse con el mismo formato que la guardada en el fichero que se os proporciona.
Prácticas de Informática. Grado en Ingeniería Eléctrica
Departamento de Informática e Ingeniería de Sistemas 6
• 1973 enero 159,913 0,305 1,431 0,218 1,213 144,505
Nota: Estas tres operaciones serán tres nuevas funciones de la clase AnalisisDatosElectricos, y serán
llamadas desde el main. El menú mostrado al usuario debe ser modificado convenientemente para que
incluya estas nuevas opciones.


El programa que yo tengo realizo es para ir añadiendo tu mismo los datos y no para leerlos del fichero. Sino pueden hacer el programa simplemente expliquenme como se realiza. Este es el programa que hice y que hay que modificar:

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
import java.util.Scanner;
 
public class AnalisisDatosElectricos {
 
 
	public static int total = 0;
	public static InfoElectrica[] info = new InfoElectrica[18];
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("Añadir datos del siguiente mes (pulsa1),Mostrar la información de todos los meses almacenados(pulsa2).");
		int opc = input.nextInt();
		input.nextLine();
		while (opc == 1 || opc == 2) {
			if (opc == 1) {
				System.out.println("Introduce datos de año mes generacion importacion y exportacion:");
				String s = input.nextLine();
				InfoElectrica x =new InfoElectrica( s );
				AñadirDatos(x,info,total);
				System.out.println(" Añadir datos del siguiente mes (pulsa1),Mostrar la información de todos los meses almacenados(pulsa2).");
				 opc = input.nextInt();
			}
			else if (opc == 2) {
				MostrarDatos(info, total);
 
			System.out.println(" Añadir datos del siguiente mes (pulsa1),Mostrar la información de todos los meses almacenados(pulsa2).");
			opc = input.nextInt();}
		}
		System.out.println("Fin del Programa");
 
	}
 
	public static void MostrarDatos(InfoElectrica[] info, int total) {
		for (int i = 0; i < total-1; i++) {
			System.out.println(info[i]);
		}
	}
 
	public static boolean EsMesSiguiente(int mes2, int mes1, int año1, int año2) {
		boolean esMesSiguiente = false;
 
		if ((año1 == año2 - 1 && mes1 == 12 && mes2 == 1) || (año1 == año2 && mes2 == mes1 + 1)) {
			esMesSiguiente = true;
		}
		return esMesSiguiente;
	}
 
	public static InfoElectrica AñadirDatos(InfoElectrica x, InfoElectrica[] info, int total) {
		int mes1 = 0;
		int mes2 = 0;
		int año1 = 0;
		int año2 = 0;
	        if (total == 0) {
			info[total]= x;
			total++;
		} else {
		info[total].mes = mes1;
		x.mes = mes2;
		info[total].año = año1;
		x.año = año2;
 
		          if ((EsMesSiguiente(mes1, año1, mes2, año2) == true) && info.length > total) {
			            info[total + 1] = x;
			             total++;
                         }
                }
 
		return info[total];
	}
 
	public static class InfoElectrica {
		public int año;
		public int mes;
		public int generacion;
		public int importacion;
		public int exportacion;
 
		public InfoElectrica(String texto) {
			String[] partes = texto.split(" ");
                        String a = partes[0];
			String m = partes[1];
			String g = partes[2];
			String i = partes[3];
			String e = partes[4];
			año = Integer.parseInt(a);
			mes = Integer.parseInt(m);
			generacion = Integer.parseInt(g);
			importacion = Integer.parseInt(i);
			exportacion = Integer.parseInt(e);
		}
 
		public String toString() {
			return año + " " + mes + " " + generacion + " " + importacion + " "+ exportacion;
		}
	}
}

Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder