RAF的相关操作及实例演示

首先RAF,RandomAccessFile只专门用于文件读写的API。
特点:可读可写,指针操作,灵活可变。
应用实例如下:
1、设置一个注册表并写入信息。

  • 用户注册信息需要:用户名,密码,昵称,年龄
  • 其中年龄为int值,其余都是字符串
  • 每个用户信息都写入user.dat文件中。并且每个用户信息都占用100字节。
  • 其中用户名、密码、昵称各占32字节,年龄占4字节
  • 字符串故意留白好处在于便于后续修改。格式固定便于读取
public class RegDemo {public static void main(String[] args) throws IOException {Scanner scanner = new Scanner(System.in);System.out.println("欢迎注册!");System.out.println("请输入用户名:");String username = scanner.nextLine();System.out.println("请输入密码:");String password = scanner.nextLine();System.out.println("请输入昵称:");String nickname = scanner.nextLine();System.out.println("请输入年龄:");int age = scanner.nextInt();RandomAccessFile raf = new RandomAccessFile("user.dat", "rw");//先将指针移到文件末尾,这样才可以累加书写信息raf.seek(raf.length());System.out.println("pos:"+raf.getFilePointer());		//写用户名byte[]data=username.getBytes();data = Arrays.copyOf(data, 32);  //扩容到32位raf.write(data);//写密码data = password.getBytes();data = Arrays.copyOf(data, 32);raf.write(data);//写昵称data = nickname.getBytes();data = Arrays.copyOf(data, 32);raf.write(data);//写年龄raf.writeInt(age);System.out.println("pos:"+raf.getFilePointer());System.out.println("注册完毕!");raf.close();}

2、

  • :将user.dat文件中所有用户记录输出到控制台

/*** 
* 

Title: ShowAllUserDemo.java

*

Description:将user.dat文件中所有用户记录输出到控制台

* @author EP* @date 2020年3月21日 * @version 1.0*/
public class ShowAllUserDemo {public static void main(String[] args) throws IOException {RandomAccessFile raf = new RandomAccessFile("user.dat", "r");byte[]data=new byte[32];for (int i = 0; i < raf.length()/100; i++) {//读取用户名raf.read(data);String username = new String(data,"GBK").trim();//密码raf.read(data);String password = new String(data, "GBK").trim();//昵称raf.read(data);String nickname = new String(data, "GBK").trim();//年龄int age = raf.readInt();System.out.println(username+","+password+","+nickname+","+age);}raf.close();}

3、修改昵称功能:

/*** 修改昵称功能加强版* @author EP* @date 2020年3月23日  * @version 1.0*/
public class UpdateDemoOptimized {public static void main(String[] args) throws IOException {System.out.println("欢迎使用修改昵称功能!");Scanner scanner = new Scanner(System.in);System.out.println("请输入你的用户名:");String inputname = scanner.nextLine();A:while(true) {RandomAccessFile raf = new RandomAccessFile("user.dat", "rw");byte[]data=new byte[32];for (int i = 0; i < raf.length()/100; i++) {raf.seek(i*100);   //放在这里更清晰,即将指针放好raf.read(data);String username = new String(data, "GBK").trim();if (username.equals(inputname)) {System.out.println("请输入你的新昵称:");String nickname = scanner.nextLine();raf.seek(64+i*100);byte[]arr=nickname.getBytes("GBK");arr=Arrays.copyOf(arr, 32);raf.write(arr);System.out.println("昵称修改完毕!");break A;}}System.out.println("查无此人,请重新输入用户名:");inputname = scanner.nextLine();}}}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部