Javaでファイルを16進数に変換する方法

Javaでファイルを16進数に変換する方法

String formatter(“%02X “)を使用してFile into Hex値を変換する方法を示す単純なJavaプログラム。 The attached comments should be self-explanatory.

package com.example;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;

public class File2Hex
{
    public static void convertToHex(PrintStream out, File file) throws IOException {
    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 chracater 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();
  }

   public static void main(String[] args) throws IOException
   {
        //display output to console
        convertToHex(System.out, new File("c:/file.txt"));

        //write the output into a file
        convertToHex(new PrintStream("c:/file.hex"), new File("c:/file.txt"));
    }
}

Demo

ダミーコンテンツを含むファイル

ABCDEFG
12345678
!@#$%^&*()
Testing only

上記のクラスによって処理された後、次の16進値が表示されます。

41 42 43 44 45 46 47 0D 0A 31 32 33 34 35 36 37       ABCDEFG..1234567
38 0D 0A 21 40 23 24 25 5E 26 2A 28 29 0D 0A 54       8..!@#$%^&*()..T
65 73 74 69 6E 67 20 6F 6E 6C 79                      esting only