笔记(十):RandomAccessFile类(五):RandomAccessFile实战
RandomAccessFile实战
- 注册用户
- 查询用户信息
- 修改用户信息
- 总结
注册用户
利用RandomAccessFile类完成一个用户的注册功能,该用户信息占100字节,其中姓名,昵称,密码等占32个字节,年龄占4字节。
package com.tedu.raf;import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;
import java.util.Scanner;/*** 完成用户注册功能* 将一个用户信息保存到一个文件中* 这个文件可以保存多个用户信息* 程序运行一次保存一次* 用户名(String) 密码(String) 昵称(String) 年龄(int)* 每个用户信息占用100字节* 其中每个字符串信息占32字节,int型占4字节* @author Wildmess**/
public class RegDemo {public static void main(String[] args) throws IOException {Scanner scan = new Scanner(System.in);System.out.println("请输入用户名:");String name = scan.nextLine();System.out.println("请输入密码:");String pwd = scan.nextLine();System.out.println("请输入昵称:");String nick = scan.nextLine();System.out.println("请输入年龄:");int age = scan.nextInt();System.out.println("this user's name:" + name +"pwd:" + pwd + "nick:" + nick + "age:" + age);RandomAccessFile raf = new RandomAccessFile("user.txt", "rw");//将指针移动到最后raf.seek(raf.length());//写用户名//将用户名转换成字节数组byte[] arrayName = name.getBytes("utf-8");//将写入的用户名字符串字节数限定//短的扩容,长的缩容,便于后期管理arrayName = Arrays.copyOf(arrayName, 32);raf.write(arrayName);System.out.println(raf.getFilePointer());//32//写密码byte[] arrayPwd = pwd.getBytes("utf-8");arrayPwd = Arrays.copyOf(arrayPwd, 32);raf.write(arrayPwd);System.out.println(raf.getFilePointer());//64//写昵称byte[] arrayNick = nick.getBytes("utf-8");arrayNick = Arrays.copyOf(arrayNick, 32);raf.write(arrayNick);System.out.println(raf.getFilePointer());//96//写年龄raf.writeInt(age);System.out.println(raf.getFilePointer());//100System.out.println("程序结束!");raf.close();}
}
运行两次,在文件user.txt中录入俩个数据:


查询用户信息
在已经录入好数据的user.txt文件中查询出所有的用户信息:
package com.tedu.raf;import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;/*** 显示在user.txt文件中已录入的所有的用户信息* * @author Wildmess**/
public class ShowAllUserDemo {public static void main(String[] args) throws IOException {RandomAccessFile raf = new RandomAccessFile("user.txt", "r");for(int i=0; i<raf.length()/100; i++) {byte[] data = new byte[32];//一次读取32个字节raf.read(data);String name = new String(data,"utf-8");System.out.println(raf.getFilePointer());//看看RAF的指针所到位置:32raf.read(data);String pwd = new String(data,"utf-8");System.out.println(raf.getFilePointer());//64raf.read(data);String nick = new String(data,"utf-8");System.out.println(raf.getFilePointer());//96int age = raf.readInt();System.out.println(raf.getFilePointer());//100System.out.println("this user's name:" + name.trim() +"pwd:" + pwd.trim() + "nick:" + nick.trim() + "age:" + age); //trim去掉字符串中的空格}System.out.println("程序结束!");raf.close();}
}
运行结果:

修改用户信息
在已经录入好数据的user.txt文件中修改用户信息:
package com.tedu.raf;import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;
import java.util.Scanner;/*** 修改用户昵称* 在程序运行后输入用户名和新昵称* 在user.txt中查找对应用户* 如果存在修改昵称为新昵称* 如果不存在输出:查无此人* @author Wildmess**/
public class UpateDemo {public static void main(String[] args) throws IOException {Scanner scan = new Scanner(System.in);System.out.println("请输入用户名:");String name = scan.nextLine();System.out.println("请输入用户密码:");String pwd = scan.nextLine();System.out.println("请输入新昵称:");String newNick = scan.nextLine();RandomAccessFile raf = new RandomAccessFile("user.txt", "rw");boolean isUpdated = false;//标记是否为要修改的信息,默认为不修改for(int i=0; i<raf.length()/100; i++) {//将RandomAccessFile的指针移动到当前循环的用户起始位置raf.seek(i*100);//读取byte[] data = new byte[32];raf.read(data);String checkName = new String(data, "utf-8").trim();//trim去空格raf.read(data);String checkPwd = new String(data, "utf-8").trim();//对比当前取出的用户名和密码与用户输入的用户名和密码是否相同if(checkName.equals(name) || checkPwd.equals(pwd)) {data = newNick.getBytes("utf-8");data = Arrays.copyOf(data, 32);raf.write(data);isUpdated = true;//确定修改System.out.println("修改成功!");break;//终止循环}}//判断是否修改过if(!isUpdated) {System.out.println("查无此人!");}System.out.println("程序结束!");raf.close();}
}
运行结果:

可在上一个写好的查询中查看修改结果:

修改成功。
总结
自此RandomAccessFile类的学习就算是告一段落了,但是其具体的使用却显得很繁琐,针对一个简单的读写,却要使用多行代码去表示,因此,接下来我们将学习对用复杂的文件读写操作如何进行。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
