This article shows how to convert a file into a hexadecimal (hex) representative format.
for example, below is a text file.
/path/to/text.txt
ABCDEFG
12345678
!@#$%^&*()
Testing only
And we will convert the above file into the following hex format.
41 42 43 44 45 46 47 0D 0A 31 32 33 34 35 36 | ABCDEFG..123456
37 38 0D 0A 21 40 23 24 25 5E 26 2A 28 29 0D | 78..!@#$%^&*().
0A 54 65 73 74 69 6E 67 20 6F 6E 6C 79 | .Testing only
1. Java Convert File to Hex
The idea is to read the file into an InputStream
and uses String.format(%X) to convert each byte into a hex code.
FileToHex.java
package com.favtuts.io.howto; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class FileToHex { private static final String NEW_LINE = System.lineSeparator(); private static final String UNKNOWN_CHARACTER = "."; public static void main(String[] args) throws IOException { String file = "/home/tvt/workspace/favtuts/text.txt"; String s = convertFileToHex(Paths.get(file)); System.out.println(s); } public static String convertFileToHex(Path path) throws IOException { if (Files.notExists(path)) { throw new IllegalArgumentException("File not found! " + path); } StringBuilder result = new StringBuilder(); StringBuilder hex = new StringBuilder(); StringBuilder input = new StringBuilder(); int count = 0; int value; // path to inputstream.... try (InputStream inputStream = Files.newInputStream(path)) { while ((value = inputStream.read()) != -1) { hex.append(String.format("%02X ", value)); //If the character is unable to convert, just prints a dot "." if (!Character.isISOControl(value)) { input.append((char) value); } else { input.append(UNKNOWN_CHARACTER); } // After 15 bytes, reset everything for formatting purpose if (count == 14) { result.append(String.format("%-60s | %s%n", hex, input)); hex.setLength(0); input.setLength(0); count = 0; } else { count++; } } // if the count>0, meaning there is remaining content if (count > 0) { result.append(String.format("%-60s | %s%n", hex, input)); } } return result.toString(); } }
2. Convert Image file to Hex
Run the above program using an image file.
String file = "/path/to/hello.png";
Output
89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 | .PNG........IHD
52 00 00 03 11 00 00 01 1E 08 06 00 00 00 F5 | R.............õ
AE 98 9A 00 00 00 09 70 48 59 73 00 00 12 74 | ®......pHYs...t
00 00 12 74 01 DE 66 1F 78 00 00 00 07 74 49 | ...t.Þf.x....tI
//...
20 08 42 4B 88 13 21 08 82 20 08 82 20 08 42 | .BK..!.. .. .B
4B FC 7F 0B 00 ED 81 F6 3A 58 EC 00 00 00 00 | Kü...í.ö:Xì....
49 45 4E 44 AE 42 60 82 | IEND®B`.
Download Source Code
$ git clone https://github.com/favtuts/java-core-tutorials-examples
$ cd java-io/howto