1、使用RandomAccessFile实现用户的注册功能,将用户的注册信息存储到本地文件中:
package io;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;
import java.util.Scanner;
public class UserDemo {
public static void main(String[] args) throws IOException {
/*
*
* 用户完成注册功能:
* 程序开始后,要求用户输入:用户名、密码、昵称、年龄
* 将该记录写入到user.dat中
* 其中用户名、密码、昵称为字符串,年龄为一个int值
* 每条记录占用100字节,
* 其中:用户名、密码、昵称个占用32个字节,年龄占用4个字节
*
*/
System.out.println("欢迎注册");
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名");
String name = sc.nextLine();
System.out.println("请输入密码");
String password = sc.nextLine();
System.out.println("请输入昵称");
String niceName = sc.nextLine();
System.out.println("请输入年龄");
int age = Integer.parseInt(sc.nextLine());
RandomAccessFile raf = new RandomAccessFile("user.dat","rw");
//先将指针移动到文件的最后
raf.seek(raf.length());
//写用户名:先将用户名转成对应的一组字节
byte[] data = name.getBytes("UTF-8");
//将该数组扩容到32字节
data = Arrays.copyOf(data, 32);
//将该字节数组一次性写入文件
raf.write(data);
//写密码
data = password.getBytes("UTF-8");
data = Arrays.copyOf(data, 32);
raf.write(data);
//写昵称
data = niceName.getBytes("UTF-8");
data = Arrays.copyOf(data, 32);
raf.write(data);
//写年龄
raf.writeInt(age);
System.out.println("注册完毕");
raf.close();
}
}
2、实现用户修改昵称:
package io;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;
import java.util.Scanner;
public class UserDemo2 {
public static void main(String[] args) throws IOException {
/*
* 修改昵称:
* 程序启动后,要求用户输入要修改昵称的用户名以及新的昵称
* 然后将该用户昵称进行修改操作,若输入的用户名不存在,
* 则提示无此用户
*
*/
/*
* 1.获取用户输入的用户名及新昵称
* 2.使用RAF打开user.dat文件
* 3.循环读取每条数据
* 3.1将指针移动到该条记录记录用户名的位置(1*100)
* 3.2读取32字节,将用户名读取出来
* 3.3判断该用户是否为用户输入的用户
* 3.4若是此人,则移动指针到该条记录昵称位置,
* 将新昵称以32字节写入该位置,覆盖原昵称完成修改,
* 并停止循环操作。
* 3.5若不是此人则进入下次循环
*
* 可以添加一个开关,当修改过昵称改变其值,
* 最终在循环完毕后,根据开关的值判定是否有修改信息来
* 输出无此用户
*
*/
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名");
String name = sc.nextLine();
System.out.println("请输入新的昵称");
String nickName = sc.nextLine();
RandomAccessFile raf = new RandomAccessFile("user.dat","rw");
//开关,表示是否有有改过信息
boolean update = false;
for(int i = 0;i<raf.length()/100;i++) {
//先将指针移动到该条记录的开始位置
raf.seek(i*100);
//读取用户名
byte[] data = new byte[32];
raf.read(data);
String username = new String(data,"UTF-8").trim();
if(username.equals(name)) {
//修改昵称,移动指针到昵称的位置
raf.seek(i*100+64);
//重新写入昵称32字节
data = nickName.getBytes("utf-8");
data = Arrays.copyOf(data, 32);
raf.write(data);
System.out.println("修改完毕");
update = true;
break;
}
}
if(!update) {
System.out.println("无此用户");
}
raf.close();
}
}
3、将所有用户信息读取出来:
package io;
import java.io.IOException;
import java.io.RandomAccessFile;
/**
* 显示所有注册用户信息
* @author ta
*
*/
public class UserDemo3 {
public static void main(String[] args) throws IOException {
RandomAccessFile raf
= new RandomAccessFile("user.dat","r");
/*
* 循环读取若干个100字节
*/
for(int i=0;i<raf.length()/100;i++) {
//读用户名
//1先读取32字节
byte[] data = new byte[32];
raf.read(data);
//2将字节数组转换为字符串
String username = new String(data,"UTF-8").trim();
//读取密码
raf.read(data);
String password = new String(data,"UTF-8").trim();
//读昵称
raf.read(data);
String nickname = new String(data,"UTF-8").trim();
//读年龄
int age = raf.readInt();
System.out.println(username+","+password+","+nickname+","+age);
}
raf.close();
}
}