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();
	}
}