话不多说贴上代码:
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
/*
* @author zzf
* @date 2019年1月9日 下午3:53:51
*/
public class B32 {
static Integer sum = 32;
public static void main(String[] args) throws IOException {
String a = "猪八戒";
for(String chars:a.split("")) {
printHZK(chars);
}
}
public static void printHZK(String character) throws IOException {
byte[] data = character.getBytes("GB2312");
byte iHigh, iLow;// 高8位,低8位
iLow = (byte) (data[0]);
iHigh = (byte) (data[1]);
int IOffset;// 文件偏移量
IOffset = (94 * ((iLow & 0xff) - 0xA1) + ((iHigh & 0xff) - 0xA1)) * sum;// 计算偏移字节
File f = new File("D:\\HZK16");
InputStream fis = new FileInputStream(f);
fis.read(new byte[IOffset]);// 偏移一个量纲
byte mat[] = new byte[sum];// 连续读入
fis.read(mat);
fis.close();
// 画出点阵图
int i, j, k;
OutputStream out=new FileOutputStream(new File("D:\\a.txt"),true);
//创建字节流缓冲区,加快写出速度
BufferedOutputStream bout=new BufferedOutputStream(out);
//创建字符输出流对象
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(bout, "utf-8"));
for (i = 0; i < sum / 2; i++) /* 16x16点阵汉字,一共有16行 */
{
for (j = 0; j < 2; j++) { /* 横向有2个字节,循环判断每个字节的 */
for (k = 0; k < 8; k++) {
if ((mat[i * 2 + j] & (0x80 >> k)) >= 1) { // 判断一个二进制位上为 1 则打印
System.out.print("■ ");
bw.write("■ ");
} else {
System.out.print("□ ");
bw.write("□ ");
}
}
}
System.out.println();
bw.write("\r\n");
}
bw.write("\r\n");
bw.close();
bout.close();
out.close();
System.out.println();
}
}
注意这里需要导入文件HZK16
下载地址:链接: https://pan.baidu.com/s/1xC6NPV9biL9S3N1X4FbpeA 提取码: x98h