Volcado Curso de Programación Java

Lección:

Administración de Archivos


Ejercicio:

Volcado 7


Objetivo:

Cree una utilidad de "volcado": un visor hexadecimal, para mostrar el contenido de un archivo, 16 bytes en cada fila, 24 archivos en cada pantalla (y luego debe detenerse antes de mostrar las siguientes 24 filas).

En cada fila, los 16 bytes deben mostrarse primero en hexadecimal y luego como caracteres (los bytes inferiores a 32 deben mostrarse como un punto, en lugar del carácter no imprimible correspondiente).

Busca "editor hexadecimal" en Google Imágenes, si quieres ver un ejemplo de la apariencia esperada.


Código:

import java.util.*;
public class Main
{
	public static void main(String[] args)
	{
		java.io.FileInputStream file;
		final int SIZE_BUFFER = 16;

		String name = new Scanner(System.in).nextLine();

		try
		{
			file = File.OpenRead(name);
			byte[] data = new byte[SIZE_BUFFER];

			int amount;
			int c = 0;

			String line;
			do
			{
				System.out.print(ToHex(file.Position, 8));
				System.out.print("  ");


				amount = file.read(data, 0, SIZE_BUFFER);

				for (int i = 0; i < amount; i++)
				{
					System.out.print(ToHex(data[i], 2) + " ");

					if (data[i] < 32)
					{
						line += ".";
					}
					else
					{
						line += (char)data[i];
					}
				}


				if (amount < SIZE_BUFFER)
				{
					for (int i = amount; i < SIZE_BUFFER; i++)
					{
						System.out.print("   ");
					}
				}

				System.out.println(line);
				line = "";

				c++;
				if (c == 24)
				{
					new Scanner(System.in).nextLine();
					c = 0;
				}
			} while (amount == SIZE_BUFFER);

			file.close();
		}
		catch (RuntimeException e)
		{
			System.out.println("Error");
		}
	}

	public static String ToHex(int n, int digits)
	{
		String hex = String.valueOf(n, 16);
		while (hex.length() < digits)
		{
			hex = "0" + hex;
		}
		return hex;
	}
}