Ejercicio
ArrayList - Lector de archivos de texto
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 de Ejemplo
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());
}
}
}
}