ArrayList - Lector de archivos de texto Curso de Programación Java

Lección:

Gestión Dinámica de Memoria


Ejercicio:

ArrayList - Lector de archivos de texto 6


Objetivo:

Entregue aquí su lector básico de archivos de texto.

Este lector de archivos de texto siempre muestra 21 líneas del archivo de texto, y el usuario podría usar la tecla up para mostrar la línea anterior, la tecla down para mostrar la siguiente línea y la tecla ESC para salir.

Sugerencias:
El lector de archivos de texto debe tener 3 métodos:
- ReadFile (Leer el archivo de texto y almacenarlo en la memoria)
- ShowMenu (Borrar la consola y preparar la línea superior y la línea inferior [raw 23] de la consola, cambiando los colores usando Console.BackgroundColor, Console.ForegroundColor, ConsoleColor y Console.SetCursorPosition(column, raw). Una vez preparado el menú, recuerda colocar el cursor en el segundo raw).
- ShowFrom (escribir 21 líneas, considerando la posición de la primera línea a escribir)
La lógica del programa principal debe ser como: ShowMenu, ShowFrom, ReadKey, ShowMenu, ShowFrom, ReadKey....


Código:

import java.util.*;
public class Main
{
	private static ArrayList lista = new ArrayList();
	private static boolean fin;
	private static int lineaDesde = 0, lineaHasta = 21;

	static void main(String[] args)
	{
		System.out.print("Introduce nombre archivo: ");
		String nombreArchivo = new Scanner(System.in).nextLine();

		LeerFichero(nombreArchivo);

		do
		{
			MostrarMenu();
			EscribirLineas(lineaDesde, lineaHasta);
			LeerTecla();
		} while (!fin);

	}
	private static void LeerTecla()
	{
		ConsoleKeyInfo cki = new ConsoleKeyInfo();
		cki = Console.ReadKey();

		if (cki.Key == ConsoleKey.Escape)
		{
			fin = true;
		}
		else if (cki.Key == ConsoleKey.UpArrow)
		{
			if (lineaDesde > 0)
			{
				lineaDesde--;
				lineaHasta--;
			}
		}
		else if (cki.Key == ConsoleKey.DownArrow)
		{
			if (lineaHasta < lista.size())
			{
				lineaDesde++;
				lineaHasta++;
			}
		}
		else if (cki.Key == ConsoleKey.PageUp)
		{
			if ((lineaHasta + 21) < lista.size())
			{
				lineaDesde += 21;
				lineaHasta += 21;
			}
			else
			{
				lineaDesde += lista.size() - lineaHasta;
				lineaHasta += lista.size() - lineaHasta;
			}
		}
		else if (cki.Key == ConsoleKey.PageDown)
		{
			if ((lineaDesde - 21) > 0)
			{
				lineaDesde -= 21;
				lineaHasta -= 21;
			}
			else
			{
				lineaHasta = lineaDesde + (21 - lineaDesde);
				lineaDesde = 0;
			}
		}
	}

	private static void EscribirLineas(int desde, int hasta)
	{
		for (int i = desde; i < hasta; i++)
		{
			System.out.println(lista.get(i));
		}
	}

	private static void MostrarMenu()
	{
		Console.Clear();
		Console.BackgroundColor = ConsoleColor.Cyan;
		Console.ForegroundColor = ConsoleColor.Black;
		System.out.println("    ==> Lector .txt --- Version 1.0");

		Console.SetCursorPosition(0, 23);
		Console.BackgroundColor = ConsoleColor.Cyan;
		Console.ForegroundColor = ConsoleColor.Black;
		System.out.println("Pulse ESC para salir, fecha arriba y abajo para mover");

		Console.SetCursorPosition(0, 1);
		Console.BackgroundColor = ConsoleColor.Black;
		Console.ForegroundColor = ConsoleColor.White;
	}

	private static void LeerFichero(String nombreArchivo)
	{
		if (!(new java.io.File(nombreArchivo)).isFile())
		{
			System.out.println("El fichero de texto no existe");
		}
		else
		{
			try
			{
				java.io.FileReader archivoTexto = new java.io.FileReader(nombreArchivo);
			java.io.BufferedReader archivoTextoBufferedReader = new java.io.BufferedReader(archivoTexto);
				String line;

				do
				{
					line = archivoTextoBufferedReader.readLine();
					if (line != null)
					{
						lista.add(line);
					}
				} while (line != null);

				archivoTexto.close();
			}
			catch (RuntimeException e)
			{
				System.out.println("Error, " + e.getMessage());
			}
		}
	}
}