java读取文件 16进制_Java对文件的16进制读取和操作
大家可以参考一下源代码的相关部分注释,然后写出自己的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进制读取和操作相关推荐
- JAVA随机读写功能实现类_Java 实现文件随机读写-RandomAccessFile
RandomAccessFile是Java中输入,输出流体系中功能最丰富的文件内容访问类,它提供很多方法来操作文件,包括读写支持,与普通的IO流相比,它最大的特别之处就是支持任意访问的方式,程序可以直 ...
- java文件读写的基本类_Java读写文件常用方法
一.字符流:读写纯文本(txt,csv等), 1 字符流写文件主要用:FileWriter,BufferedWriter,PrintWriter 1.1 测试 FileWriter 写入 privat ...
- java遍历文件夹下的_Java遍历文件夹下的所以文件
利用Java递归遍历文件夹下的所以文件,然后对文件进行其他的操作.如:对文件进行重命名,对某一类文件进行重编码.可以对某一工程下的全部.java文件进行转码成utf-8等 代码如下,这里只对文件进行重 ...
- java 获取md5值报错_java获取文件的MD5值
package com.sichang.util; import java.io.File; import java.io.FileInputStream; import java.math.BigI ...
- java 文件的md5值_Java计算文件的MD5值
import java.io.File; import java.io.FileInputStream; import java.math.BigInteger; import java.securi ...
- java 创建文件夹的方法_Java创建文件夹的方法
Java创建文件夹的方法 /** * 用于创建文件夹的方法 * @param mkdirName */ public void mkdir(String mkdirName) { try { File ...
- java实现文件加密与解密_Java实现文件的加密解密功能示例
本文实例讲述了Java实现文件的加密解密功能分享给大家供大家参考,具体如下: package com.copy.encrypt; import java.io.File; import java.io ...
- java 判断是否为cst格式_Java判断文件编码格式
1:简单判断是UTF-8或不是UTF-8,因为一般除了UTF-8之外就是GBK,所以就设置默认为GBK. 按照给定的字符集存储文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理 ...
- java遍历文件夹下所有图片_JAVA 遍历文件夹下的所有文件
JAVA遍历文件下的所有文件和文件夹 @Test public void traverseFolder1( ) { String path = "D:\\TEST"; int fi ...
最新文章
- 教程:9、网络通信工具
- java alsa 编程_搭建JavaWeb开发环境
- [转]html5 Canvas画图教程(1)—画图的基本常识
- io流不关闭会怎么样_幸福树一个月不浇水会怎么样
- 知识图谱 图数据库 推理_图数据库的知识表示与推理
- python爬虫之requests模块2
- CCF NOI1056 表达式
- 30岁前,一定要完成哪些人生规划?
- 线性基——数集压缩自动机
- scala 正则表达式
- 关于怎么计算某一年的第一天为周几的问题
- [VS]网页连接数据库
- Java微信授权登陆
- 踩坑前端框架 - iview DatePicker 时间选择年月日时分秒
- error: (-215:Assertion failed) npoints = 0 (depth == CV_32F || depth == CV_32F || depth ==CV_32S
- InnoDB:page_cleaner:1000ms intended loop 解决
- 巴什博奕(Bash Game)入门
- PDF被密码保护怎么解除?一篇文章教会你
- Unit elasticsearch.service entered failed state
- 用 HTML5 造个有诚意的 23D 招聘稿