package utilities; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; public class HexReader { public static String readEofTag(File file) throws IOException { // This method does not work at all String eofTag = null; InputStream is = new FileInputStream(file); int value = 0; StringBuilder sbHex = new StringBuilder(); StringBuilder sbText = new StringBuilder(); if ((value = is.read()) == -1) { // convert to hex value with "X" formatter sbHex.append(String.format("%02X ", value)); // If the character is not convertable, just print a dot symbol "." if (!Character.isISOControl(value)) { sbText.append((char) value); } else { sbText.append("."); } } is.close(); eofTag = sbText.toString(); return eofTag; } public static void convertToHex(PrintWriter out, File file) throws IOException { /* * TODO: tests show that only the first part of the file is * read/converted. The rest is missing */ InputStream is = new FileInputStream(file); int bytesCounter = 0; int value = 0; StringBuilder sbHex = new StringBuilder(); StringBuilder sbText = new StringBuilder(); StringBuilder sbResult = new StringBuilder(); while ((value = is.read()) != -1) { // convert to hex value with "X" formatter sbHex.append(String.format("%02X ", value)); // If the character is not convertable, just print a dot symbol "." if (!Character.isISOControl(value)) { sbText.append((char) value); } else { sbText.append("."); } // if 16 bytes are read, reset the counter, // clear the StringBuilder for formatting purpose only. if (bytesCounter == 15) { sbResult.append(sbHex).append(" ").append(sbText).append("\n"); sbHex.setLength(0); sbText.setLength(0); bytesCounter = 0; } else { bytesCounter++; } } // if still got content if (bytesCounter != 0) { // add spaces more formatting purpose only for (; bytesCounter < 16; bytesCounter++) { // 1 character 3 spaces sbHex.append(" "); } sbResult.append(sbHex).append(" ").append(sbText).append("\n"); } out.print(sbResult); is.close(); } }