例
package com.mkyong;
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"));
}
}
デモ
ダミーコンテンツを含むファイル
ABCDEFG 12345678 !@#$%^&** () Testing only
上記のクラスで処理された後、次のHex値が表示されます:
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
リファレンス
リンク://タグ/ファイル/[ファイル]リンク://タグ/16進数/[16進]リンク://タグ/io/[io]リンク://タグ/java/[java]