public class ShowAllUserDemo {
public static void main(String[] args) throws IOException {
RandomAccessFile raf = new RandomAccessFile("data.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());//32
raf.read(data);
String pwd = new String(data,"utf-8");
System.out.println(raf.getFilePointer()); //64
//读取下一个32字节
raf.read(data);
String nick = new String(data,"utf-8");
System.out.println(raf.getFilePointer());
int age = raf.readInt();
System.out.println(raf.getFilePointer());
System.out.println(name+","+pwd+","+nick+","+age);
}
}
}
- raf循环次数都是整百为单位,除以100就是循环几次。
修改用户名练习
/*
* 修改昵称
* 程序运行后用户名和新昵称
* */
public class UpdateDemo {
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 nick = scan.nextLine();
RandomAccessFile raf = new RandomAccessFile("data.txt","rw");
boolean isUpdated = false; //表示是否修改的变量,默认没修改。
for (int i = 0;i<raf.length()/100;i++){
//移动指针到每次循环用户的起始位置
raf.seek(i*100);
//读取用户名
byte[] data = new byte[32];
raf.read(data);
//去空格
String n = new String(data,"utf-8").trim();
//对比当前取出的用户名和用户要修改的用户名是否相同
if (n.equals(name)) {
//移动到昵称位置
raf.seek(i*200+64);
data = nick.getBytes("utf-8");
data = Arrays.copyOf(data,32);
raf.write(data);
isUpdated = true;
System.out.println("修改成功");
break;
}
}
//判断是否修改过
if (!isUpdated){
System.out.println("查无此人");
}
raf.close();
}
}