大家可以参考一下源代码的相关部分注释,然后写出自己的16进制处理程序。

有几个重点地方:

16进制字符串-》10进制数          int input = Integer.parseInt("Str", 16)

10进制整数-》16进制字符串          String hex = Integer.toHexString(int)

文件读取方法          作为2进制文件直接读取,一个byte为单位的读取。 将来我还将在此基础上制作Java版本的16进制编辑器,请大家多多支持。谢谢。 /**  * RO Utility  * Mainly used for:  * 1.Double Open client  * 2.Open Unlimited View  *  这是个样本程序,是我针对游戏修改写的。主要作用是将游戏文件用16进制打开,然后  * 修改相关的部分,然后保存。  *   * @author Ciro Deng(cdtdx@sohu.com)  * @version 1.0  */ package cn.edu.uestc.rotool; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.StringWriter; /**  * RO Utility Mainly used for: 1.Double Open client 2.Open Unlimited View  *   * @author Ciro Deng(cdtdx@sohu.com)  * @version 1.0  *   */ public class MainTool {     private final String RO_HOME = "D://Games//RO//"; //修改文件的路径     private final String FILE = "Ragexe"; //修改文件的主文件名     private final String BAK_FILE = FILE + "_BAK.sp2"; //修改文件的备份扩展名     private final String PATCH_FILE = FILE + ".sp2"; //修改文件的扩展名     /**      * 进行16进制替换的规则定义      * Pattern Array Example: pattern[0][0] = "Original Hex String"; 原16进制字符串      * pattern[0][1] = "New Hex String"; 要替换的16进制字符串      */     private final String[][] pattern = {             { "85C074095F5E33C05B8BE55DC3", "85C0EB095F5E33C05B8BE55DC3" },             { "85C0740E5F5EB801000000", "85C0EB0E5F5EB801000000" }, // Double             // Open             { "000066430000C843", "0000004300008644" } // Umlimited View     };     /**      * 备份文件恢复      * ture the backup file into real file      *       */     public void restore() {         if (isExistBackup()) {             new File(RO_HOME + PATCH_FILE).delete();             new File(RO_HOME + BAK_FILE)                     .renameTo(new File(RO_HOME + PATCH_FILE));             System.out.println("[----------------Restore file OK!--------------------]");         } else {             System.out.println("Backup file does not exist!");             System.exit(0);         }     }     public void init() { //初始化操作         if (new File(RO_HOME + PATCH_FILE).exists()) {             System.out                     .println("[-------------Initialize original file OK!-----------]");         } else {             System.out.println("File is not Existed! Please restore it first!");         }         // backup original file         if (!isExistBackup()) {             new File(RO_HOME + PATCH_FILE)                     .renameTo(new File(RO_HOME + BAK_FILE));         }         System.out                 .println("[---------------Please choose your action------------]");         System.out.println("1:Modify double open and unlimited view mode!");         System.out.println("2:Restore original mode!");         System.out.println("Please input 1 or 2 and Enter:");     }     public void success() { //成功操作提示         System.out.println();         System.out                 .println("[-------------Patch file OK! Have fun with RO!-------]");     }     /**      * 进行16进制替换      * replace input Hex String with defined pattern      *       * @param original      * @return      */     public String replace(String original) {         for (int i = 0; i < pattern.length; i++) {             original = original.replaceAll(pattern[i][0].toLowerCase(),                     pattern[i][1].toLowerCase());         }         return original;     }     /**      * 将文件读取为16进制String      * Read original File and transfer it into Hex String      *       * @return      * @throws IOException      */     public String readOriginal2Hex() throws IOException {         FileInputStream fin = new FileInputStream(new File(RO_HOME + BAK_FILE));         StringWriter sw = new StringWriter();         int len = 1;         byte[] temp = new byte[len];        /*16进制转化模块*/         for (; (fin.read(temp, 0, len)) != -1;) {             if (temp[0] > 0xf && temp[0] <= 0xff) {                  sw.write(Integer.toHexString(temp[0]));             } else if (temp[0] >= 0x0 && temp[0] <= 0xf) {//对于只有1位的16进制数前边补“0”                 sw.write("0" + Integer.toHexString(temp[0]));             } else { //对于int<0的位转化为16进制的特殊处理,因为Java没有Unsigned int,所以这个int可能为负数                 sw.write(Integer.toHexString(temp[0]).substring(6));             }         }         return sw.toString();     }     /**      * 将替换后的16进制字符串写回文件      * write replaced original String to file      *       * @param replaced      * @throws NumberFormatException      * @throws IOException      */     public void writeNew2Binary(String replaced) throws NumberFormatException,             IOException {         FileOutputStream fout = new FileOutputStream(RO_HOME + PATCH_FILE);         for (int i = 0; i < replaced.length(); i = i + 2) {             fout.write(Integer.parseInt(replaced.substring(i, i + 2), 16));         }     }     /**      * test direct output string to file      *       * @param temp      * @throws IOException      */     public void writeTest(String temp) throws IOException {         FileOutputStream fout = new FileOutputStream(RO_HOME + "test.txt");         for (int i = 0; i < temp.length(); i++) {             fout.write(temp.charAt(i));         }     }     /**      * check if the backup file exists      *       * @return      */     public boolean isExistBackup() {         return new File(RO_HOME + BAK_FILE).exists();     }     /**      * 主要操作方法,组织工作流程      * Main process method      *       * @throws IOException      */     public void patch() throws IOException {         // init         init();        //输入参数:        //1:进行查找替换        //2:将备份文件恢复         String input = new BufferedReader(new InputStreamReader(System.in))                 .readLine();         if (input.equals("1")) {             String temp = null;             temp = readOriginal2Hex();             temp = replace(temp);             writeNew2Binary(temp);             success();         } else if (input.equals("2")) {             restore();         } else {             System.out.println("Bad input parameter!");             System.exit(0);         }     }     /**      * Main方法      * main      *       * @param args      * @throws IOException      */     public static void main(String[] args) throws IOException {         MainTool tool = new MainTool();         tool.patch();     } }

java读取文件 16进制_Java对文件的16进制读取和操作相关推荐

  1. JAVA随机读写功能实现类_Java 实现文件随机读写-RandomAccessFile

    RandomAccessFile是Java中输入,输出流体系中功能最丰富的文件内容访问类,它提供很多方法来操作文件,包括读写支持,与普通的IO流相比,它最大的特别之处就是支持任意访问的方式,程序可以直 ...

  2. java文件读写的基本类_Java读写文件常用方法

    一.字符流:读写纯文本(txt,csv等), 1 字符流写文件主要用:FileWriter,BufferedWriter,PrintWriter 1.1 测试 FileWriter 写入 privat ...

  3. java遍历文件夹下的_Java遍历文件夹下的所以文件

    利用Java递归遍历文件夹下的所以文件,然后对文件进行其他的操作.如:对文件进行重命名,对某一类文件进行重编码.可以对某一工程下的全部.java文件进行转码成utf-8等 代码如下,这里只对文件进行重 ...

  4. java 获取md5值报错_java获取文件的MD5值

    package com.sichang.util; import java.io.File; import java.io.FileInputStream; import java.math.BigI ...

  5. java 文件的md5值_Java计算文件的MD5值

    import java.io.File; import java.io.FileInputStream; import java.math.BigInteger; import java.securi ...

  6. java 创建文件夹的方法_Java创建文件夹的方法

    Java创建文件夹的方法 /** * 用于创建文件夹的方法 * @param mkdirName */ public void mkdir(String mkdirName) { try { File ...

  7. java实现文件加密与解密_Java实现文件的加密解密功能示例

    本文实例讲述了Java实现文件的加密解密功能分享给大家供大家参考,具体如下: package com.copy.encrypt; import java.io.File; import java.io ...

  8. java 判断是否为cst格式_Java判断文件编码格式

    1:简单判断是UTF-8或不是UTF-8,因为一般除了UTF-8之外就是GBK,所以就设置默认为GBK. 按照给定的字符集存储文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理 ...

  9. java遍历文件夹下所有图片_JAVA 遍历文件夹下的所有文件

    JAVA遍历文件下的所有文件和文件夹 @Test public void traverseFolder1( ) { String path = "D:\\TEST"; int fi ...

最新文章

  1. 教程:9、网络通信工具
  2. java alsa 编程_搭建JavaWeb开发环境
  3. [转]html5 Canvas画图教程(1)—画图的基本常识
  4. io流不关闭会怎么样_幸福树一个月不浇水会怎么样
  5. 知识图谱 图数据库 推理_图数据库的知识表示与推理
  6. python爬虫之requests模块2
  7. CCF NOI1056 表达式
  8. 30岁前,一定要完成哪些人生规划?
  9. 线性基——数集压缩自动机
  10. scala 正则表达式
  11. 关于怎么计算某一年的第一天为周几的问题
  12. [VS]网页连接数据库
  13. Java微信授权登陆
  14. 踩坑前端框架 - iview DatePicker 时间选择年月日时分秒
  15. error: (-215:Assertion failed) npoints = 0 (depth == CV_32F || depth == CV_32F || depth ==CV_32S
  16. InnoDB:page_cleaner:1000ms intended loop 解决
  17. 巴什博奕(Bash Game)入门
  18. PDF被密码保护怎么解除?一篇文章教会你
  19. Unit elasticsearch.service entered failed state
  20. 用 HTML5 造个有诚意的 23D 招聘稿

热门文章

  1. Linux mke2fs 硬盘格式化
  2. 字符串中统计单词个数
  3. webstorm基础使用总结
  4. 基于asp.net + easyui框架,一步步学习easyui-datagrid——界面(一)
  5. Excel电子表格的使用技巧!很实用
  6. 物联网协议Coap协议介绍
  7. apache2启动和停止操作
  8. AB1601定时器1注意事项
  9. Python爬取B站弹幕方法介绍
  10. linux下怎么编译贪吃蛇,Linux 环境下C语言编译实现贪吃蛇游戏(转载)