📄 randomfiledemo.java
字号:
package chapter10;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.lang.String;
//员工类
class Employee {
public String name = null;
public int age = 0;
public static final int LEN = 8;
public Employee(String name, int age) {
//控制员工姓名的长度在8个字符以内
if (name.length() > LEN) {
name = name.substring(0, 8); //subString(a,b)取出第a到b-1位置的字符
} else {
while (name.length() < LEN) {
name += "\u0000"; //填充空格
}
}
this.name = name;
this.age = age;
}
}
//测试
public class RandomFileDemo {
public static void main(String[] args) throws IOException {
Employee e1 = new Employee("zhangsan111", 23);
Employee e2 = new Employee("lisi", 24);
Employee e3 = new Employee("wangwu", 25);
File f = new File("C://employee.txt");
if (!f.exists()) {
f.createNewFile();
}
RandomAccessFile ra = new RandomAccessFile(f, "rw");
ra.write(e1.name.getBytes()); //write()只写入一个字节的数据或是字节数组 getBytes()转换成为字节数组
ra.write(String.valueOf(e1.age).getBytes());
ra.write("\r\n".getBytes()); //换行
ra.write(e2.name.getBytes());
ra.write(String.valueOf(e2.age).getBytes());
ra.write("\r\n".getBytes());
ra.write(e3.name.getBytes());
ra.write(String.valueOf(e3.age).getBytes());
ra.write("\r\n".getBytes());
ra.close(); //关闭
int len = 0;
int agelen = 0;
byte[] buf = new byte[8];
byte[] agebuf = new byte[2];
String strName = null;
String strAge = null;
//新建一个对象
RandomAccessFile raf = new RandomAccessFile(f, "r");
raf.skipBytes(12); //skipBytes()相对定位,开始读取第二行员工资料
len = raf.read(buf); //len代表实际(有效)的字节数(有效字节存放在数组前部)
agelen = raf.read(agebuf);
strName = new String(buf, 0, len); //由Char数组转换为字符串
strAge = new String(agebuf, 0, agelen);
System.out.println(strName.trim() + ":" + strAge); //trim()方法去掉字符串中的不可显示的字符
raf.seek(0); //绝对定位,开始读取第一行员工资料
len = raf.read(buf); //len代表实际(有效)的字节数
agelen = raf.read(agebuf);
strName = new String(buf, 0, len);
strAge = new String(agebuf, 0, agelen);
System.out.println(strName.trim() + ":" + strAge);
raf.readLine(); //读取第一行,放弃接收数据
raf.readLine(); //读取第二行,放弃接收数据
String str = raf.readLine(); //读取第三行员工资料,接收数据
strName = str.substring(0, 7);
strAge = str.substring(8, 10);
System.out.println(strName.trim() + ":" + strAge);
raf.close();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -