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