Navegar por el directorio Curso de Programación Java

Lección:

Bibliotecas Adicionales


Ejercicio:

Navegar por el directorio 8


Objetivo:

Cree un programa para mostrar los archivos en el directorio actual y para permitir que el usuario se mueva hacia arriba y hacia abajo en esa lista. Si el usuario presiona Intro en un nombre de directorio, ingresará ese directorio; si presiona Intro en un archivo, ese archivo se iniciará.


Código:

import java.util.*;
public class Main
{
	private static int position = 0;

	private static ArrayList items;

	private static String directory = ".";

	static void main(String[] args)
	{
		while (true)
		{
			Console.Clear();

			items = GetItems(directory);

			ShowItems();
			ShowIndications();
			ReadKeys();
			Thread.sleep(200);
		}
	}

	private static void OpenFile(Item item)
	{
		if (item.getIsFile())
		{
			Process.Start(item.getName());
		}
	}

	private static void ReadKeys()
	{
		ConsoleKeyInfo key = Console.ReadKey();
		switch (key.Key)
		{
			case UpArrow:
				if (position > 0)
				{
					position--;
				}
				break;
			case DownArrow:
				if (position < items.size() - 1)
				{
					position++;
				}
				break;
			case Enter:
				Item item = items.get(position);

				if (item.getIsFile())
				{
					OpenFile(item);
				}
				else
				{
					directory = item.getPath();
				}
				break;
		}
	}

	private static void ShowSelected(int i)
	{
		if (i == position)
		{
			Console.SetCursorPosition(0, position);
			Console.BackgroundColor = ConsoleColor.DarkCyan;
		}
		else
		{
			Console.BackgroundColor = ConsoleColor.Black;
		}
	}

	private static ArrayList GetItems(String direc)
	{
		try
		{
			ArrayList items = new List();

			String[] directories = (new java.io.File(direc)).list(java.io.File::isDirectory);
			for (String directory : directories)
			{
				items.add(new Item(directory, false));
			}

			String[] files = (new java.io.File(direc)).list(java.io.File::isFile);
			for (String file : files)
			{
				items.add(new Item(file, true));
			}

			return items;
		}
		catch (java.lang.Exception e)
		{
			System.out.println("Error reading items.");
			return null;
		}
	}

	private static void ShowItems()
	{
		int i = 0;
		for (Item item : items)
		{
			ShowSelected(i);
			System.out.println(item.getPath());
			i++;
		}
		Console.BackgroundColor = ConsoleColor.Black;
	}

	private static void ShowIndications()
	{
		Console.SetCursorPosition(0, 23);
		System.out.println("Press arrow up for move up  | Press arrow down for move down");
	}
}

public class Item
{
	private String Path;
	public final String getPath()
	{
		return Path;
	}
	public final void setPath(String value)
	{
		Path = value;
	}

	private boolean IsFile;
	public final boolean getIsFile()
	{
		return IsFile;
	}
	public final void setIsFile(boolean value)
	{
		IsFile = value;
	}

	public final String getName()
	{
		return getPath().substring(2);
	}

	public Item(String path, boolean isFile)
	{
		this.setPath(path);
		this.setIsFile(isFile);
	}
}