「java读取磁盘扇区」磁盘以扇区大小的块读写数据

博主:adminadmin 2023-01-10 10:48:11 956

本篇文章给大家谈谈java读取磁盘扇区,以及磁盘以扇区大小的块读写数据对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

怎么把这个文件的内容输出来啊,用C++和java都可以。

你可以参考一下源代码的相关部分注释,然后写出自己的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

*/

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 { //对于int0的位转化为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的问题,安装java的时候这个窗口为什么总是跳出来

这种情况应该属于注册表有误,丢失了个人设置,或系统的环境变量, 首先建议拔下3G无线网卡和其他USB设备,重启电脑看看是否还会报错, 如果依然报错,请再次重启电脑按F8选最后一次正确的配置,或者进安全模式下,系统还原到正常时, 依然不能解决的,则有可能是硬盘存在错误了,需要修复磁盘错误, 建议使用DiskGenius检测和修复硬盘坏道。

或者使用系统自带磁盘纠错功能检查硬盘错误的步骤: 通过单击「开始」按钮 ,然后单击“计算机”,打开“计算机”。 右键单击要检查的驱动器,然后单击“属性”。 单击“工具”选项卡,然后在“查错”下,单击“立即检查”。

? 如果系统提示您输入管理员密码或进行确认,请键入该密码或提供确认。 若要自动修复通过扫描所检测到的文件和文件夹问题,请选择“自动修复文件系统错误”。否则,磁盘检查将报告问题,但不进行修复。

若要执行彻底的检查,请选择“扫描并尝试恢复坏扇区”。该扫描操作将尝试查找并修复硬盘自身的物理错误,可能需要较长时间才能完成。 若要既检查文件错误又检查物理错误,请选择“自动修复文件系统错误”和“扫描并尝试恢复坏扇区”。

(出现严重磁盘错误建议用此选项修复) 修复完毕后,再次使用DiskGenius选中C盘,看看是否设置C盘为主逻辑分区,并且激活设置为活动分区,如果没有就需要改一下设置,设置C盘为C盘为主逻辑分区,并且激活设置为活动分区, 祝顺利!有问题,请追问。

有帮助,望采纳。

linux ln -s 用ln -s 链接 根目录到 /home/good怎么做啊。

创建软连接,命令如下:

ln -s / /home/good/linkname

ln的链接分软链接和硬链接两种:

1、软链接就是:“ln –s 源文件 目标文件”,只会在选定的位置上生成一个文件的镜像,不会占用磁盘空间,类似与windows的快捷方式。

2、硬链接ln源文件目标文件,没有参数-s, 会在选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。

扩展资料

软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。

链接文件甚至可以链接不存在的文件,这就产生一般称之为”断链”的现象,链接文件甚至可以循环链接自己。类似于编程语言中的递归。

软链接文件只是其源文件的一个标记,当删除了源文件后,链接文件不能独立存在,虽然仍保留文件名,但却不能查看软链接文件的内容了。

用ln -s 命令可以生成一个软连接,如下:

[root@linux236 test]# ln -s source_file softlink_file

在对符号文件进行读或写操作的时候,系统会自动把该操作转换为对源文件的操作,但删除链接文件时,系统仅仅删除链接文件,而不删除源文件本身。

删除硬/软链接用rm softlink_file

或者unlink softlink_file

参考资料:百度百科—软链接

JAVA语言怎么读取硬盘全部数据?

如果数据在文件层面,里面读取硬盘的全部文件,这个用递归枚举文件和文件夹就行了。

但是如果你想读取硬盘的扇区数据,这个java不擅长呢,C、C++、汇编擅长。

绝望了,高手进‘‘

啊哈,有活干啦~

恩,建议用NOD32吧 占系统资源极小,而且杀毒效率超高(本人亲身体会)

因为官方下载要用帐号和密码,所以你也可以用迅雷下.要么,你也可以去 蓝鸟NOD32 下

下面是转自NOD32官方的自述(不会有假):ESET NOD32只占极少系统资源,不会影响电脑速度,带给您升级硬件般的感受。ESET NOD32扫描速度全球领先,高达40MB/s以上,扫描系统时不必再漫长等待。 ESET NOD32连续九年In the Wild病毒无一遗漏,唯一45次通过VB100%权威认证。

ESET NOD32在全球共获得超过100多个奖项,包括Virus Bulletin, AV Comparative 2006年度总冠军,PC Magazine, ICSA认证, Checkmark认证等, 更加是全球唯一通过45次VB100%测试的防毒软件,高居众产品之榜首!

官网

如果实在下载不了的话,你就去下载

对了,你在蓝鸟(就是上面的网站)里注册个帐号,就可以在普通会员区找到用户可密码了,那里是站长专门弄的,都可以用 相信我,老兄~

NOD32 没错~

再来比较下卡巴和NOD32谁厉害吧(我个人的经历),首先是卡巴,占系统资源很大,几乎是占了内存30MB以上!有时还会更高!我的最高记录是被占了49MB.恩 但卡巴确实比较厉害,杀毒能力我不否认.世界一流的,不像瑞星,杀个木马都杀不了(我以前用瑞星,杀个特洛伊,重起后他又出来了,安全模式下他都杀不了,所以我对瑞星彻底失望,还有很多类似的,我就不多说了)再者来看看卡巴的网络防毒吧,有一次,我进入一个小说网站:云霄阁(现在已经被公安机关关掉了,因为侵犯了写小说作者的权利),那个时候我用的还是卡巴,而就在那几天,我经同学介绍,换了NOD32,结果一进那网站,就提示我有木马.起先我还不信,而后来找来位高手看过网站后,他告诉我是有个木马,可能是被人挂进去的.我当时楞了好久啊

再来看看杀毒效率吧,也就是我换NOD32的那天,我用NOD32给自己的电脑来了个全盘扫描,结果扫出了2个病毒(也就是说,卡巴没扫出来)而且,扫完全盘不超过半个小时(我的电脑用卡巴扫过,用了2个小时27分)扫描速度也比卡巴快了吧

我打字打不动了 用不用随你吧 嘎嘎 88

java想调用C++的方法,读磁盘扇区数据,但是用javah生成头文件生成不了。 这是我的c++代码。答得好的有加分

应该是将这个函数编译为dll,

然后在java中调用,

这篇文章应该对你有帮助吧,

关于java读取磁盘扇区和磁盘以扇区大小的块读写数据的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。