一Java小白努力钻研花样繁多的文件读写操作——终于搞好啦(*^▽^*)
多说无益,直接上代码吧:
import java.io.*;
import java.util.Scanner;
public class Hello {
public static void main(String[] args) throws IOException {
// 读取当前数据
// 打开存档文件
FileInputStream fis = new FileInputStream
("C:\ProgramData\PopCap Games\PlantsVsZombies\userdata\user1.dat");
int[] off = { -1, 0x04, 0x09, 0x08, 0x304, 0x0C}; // 测试得到的偏移量
int read = 0;
int[] reading = {0,0,0,0,0};
for (int i = 1; i <= 5; i++) {
fis.skip(off[i] - off[i-1] - 1);
read = fis.read();
reading[i - 1] = read;
System.out.println(read);
}
fis.close();
fis = new FileInputStream
("C:\ProgramData\PopCap Games\PlantsVsZombies\userdata\user1.dat");
byte[] b = new byte[1024];
fis.read(b);
fis.close();
// 用户输入
Scanner scan = new Scanner(System.in);
int input = 0;
while (true) {
System.out.printf("菜单:rn");
System.out.printf
("1.当前关卡:%drn2.当前金钱:%drn3.解谜模式:%drn4.无尽模式:%drn",
reading[0], 10*(256*reading[1]+reading[2]), reading[3], reading[4]);
System.out.printf("输入你要修改的选项(输入0以退出):rn");
input = scan.nextInt();
System.out.flush();
if (input >= 1 && input <= 4) {
System.out.printf("请输入你的目标数据:rn");
int temp = scan.nextInt();
if (input == 1) reading[0] = temp;
else if (input >= 3) reading[input] = temp;
else {
reading[1] = temp / 10 / 256;
reading[2] = temp / 10 % 256;
}
}
else if (input == 0) {
break;
}
else {
System.out.printf("无效参数!请重新输入.rn");
continue;
}
}
scan.close();
// 写入修改后的数据
FileOutputStream fos = new FileOutputStream
("C:\ProgramData\PopCap Games\PlantsVsZombies\userdata\user1.dat");
for (int i = 1; i <= 5; i++) {
b[off[i]] = (byte) reading[i - 1];
}
fos.write(b);
fos.close();
}
}
跑出来长这样:
菜单: 1.当前关卡:41 2.当前金钱:5120 3.解谜模式:1 4.无尽模式:1 输入你要修改的选项(输入0以退出): 1 请输入你的目标数据: 45 菜单: 1.当前关卡:45 2.当前金钱:5120 3.解谜模式:1 4.无尽模式:1 输入你要修改的选项(输入0以退出): 2 请输入你的目标数据: 10240 菜单: 1.当前关卡:45 2.当前金钱:10240 3.解谜模式:1 4.无尽模式:1 输入你要修改的选项(输入0以退出): 3 请输入你的目标数据: 1 菜单: 1.当前关卡:45 2.当前金钱:10240 3.解谜模式:1 4.无尽模式:1 输入你要修改的选项(输入0以退出): 4 请输入你的目标数据: 0 菜单: 1.当前关卡:45 2.当前金钱:10240 3.解谜模式:1 4.无尽模式:0 输入你要修改的选项(输入0以退出): 0 进程已结束,退出代码为 0
之前还在想怎么删除文件,后面发现只需要改一下FileOutputStream的append参数就可以了——默认为false就够用~
看看效果:
END
参考资料:
java删除文件目录及文件_Java删除文件,目录_从零开始的教程世界-CSDN博客
java 标准输入System.in_gt.liu的博客-CSDN博客
java如何指定起始位置和读取长度读取InputStream - OSCHINA - 中文开源技术交流社区
java:system根据输入的内容,然后输出(字节流) - 穆晟铭 - 博客园



